C言語

【C言語】第3章第13回:文字列と数値の相互変換

C言語では、文字列と数値を相互に変換する操作が多くの場面で必要になります。この章では、atoiatofitoaなどの関数を使用して、文字列と数値を変換する方法を解説します。

1. 数値を文字列に変換するとは?

数値を文字列に変換する操作は、数値を人間が読める形式で表示する場合や、ファイルに書き込む場合に役立ちます。

例:数値を文字列に変換

#include <stdio.h>
#include <stdlib.h>

int main() {
    int number = 12345;
    char str[20];

    // 数値を文字列に変換
    sprintf(str, "%d", number);
    printf("Converted string: %s\n", str);

    return 0;
}

解説:

  • sprintf関数は、数値を文字列形式にフォーマットして格納します。
  • %dは整数を表すフォーマット指定子です。

2. 文字列を数値に変換するとは?

文字列を数値に変換する操作は、入力データを計算や比較に利用する場合に役立ちます。

例:文字列を整数に変換

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12345";
    int number;

    // 文字列を数値に変換
    number = atoi(str);
    printf("Converted number: %d\n", number);

    return 0;
}

解説:

  • atoi関数は、文字列を整数型に変換します。
  • 文字列が数値以外の文字を含む場合、未定義の動作が発生する可能性があるため注意が必要です。

3. 小数点を含む文字列の変換

例:文字列を浮動小数点数に変換

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123.45";
    double number;

    // 文字列を浮動小数点数に変換
    number = atof(str);
    printf("Converted number: %.2f\n", number);

    return 0;
}

解説:

  • atof関数は、文字列を浮動小数点型に変換します。
  • 入力が有効な小数形式であることを確認する必要があります。

4. 進数変換を伴う文字列変換

特定の進数表現を整数に変換する場合、strtol関数が役立ちます。

例:16進数文字列を整数に変換

#include <stdio.h>
#include <stdlib.h>

int main() {
    char hexStr[] = "1A3F";
    int number;

    // 16進数文字列を整数に変換
    number = strtol(hexStr, NULL, 16);
    printf("Converted number: %d\n", number);

    return 0;
}

解説:

  • strtolは、指定された進数(ここでは16進数)で文字列を整数に変換します。
  • NULLを渡すことで、変換に失敗した場合のエラーハンドリングが不要になります。

5. 練習問題

以下の課題に挑戦して、文字列と数値の相互変換を練習しましょう。

  1. ユーザーから入力された数値を文字列に変換して出力するプログラムを作成してください。
  2. 文字列で入力された数値を整数に変換し、その2倍の値を出力するプログラムを作成してください。
  3. ユーザーが入力した16進数文字列を整数に変換して表示するプログラムを作成してください。

6. 練習問題の解答と解説

問1の解答

#include <stdio.h>
#include <stdlib.h>

int main() {
    int number;
    char str[20];

    printf("Enter a number: ");
    scanf("%d", &number);

    sprintf(str, "%d", number);
    printf("Converted string: %s\n", str);

    return 0;
}

7. まとめ

文字列と数値の相互変換は、C言語プログラミングにおいて非常に重要なスキルです。基本的な関数を活用して、柔軟にデータ形式を扱えるようになりましょう。