この記事では、C言語で文字列を数値に数値を文字列に変換する方法を解説します。
文字列を数値に変換することで演算に使うことができ、数値を文字列に変換することで桁数を取得できたりfor文を使って桁ごとに処理できたりします。
それでは、変換する方法を見ていきましょう!
スポンサーリンク
文字列を数値に変換する
文字列から数値型に変換するには以下のような関数を使います。
文字列 から 整数
| atoi | 文字列を int型 に変換 |
|---|---|
| atol | 文字列を long型 に変換 |
| atoll | 文字列を long long型 に変換 |
文字列 から 浮動小数点数
| atof | 文字列を double型 に変換 |
|---|
試しに文字列を数値に変換して出力してみます。
#include <stdio.h> #include <stdlib.h> int main(void){ // 変換する文字列 char s[] = "10"; // 整数に変換 int i = atoi(s); long l = atol(s); long long ll = atoll(s); printf("int: %d\n", i); printf("long: %ld\n", l); printf("long long: %lld\n", ll); // 浮動小数点数に変換 double d = atof(s); printf("double: %f\n", d); }
実行結果
int: 10 long: 10 long long: 10 double: 10.000000
文字列に数値に変換できない文字が含まれている場合0が返される。
#include <stdio.h> #include <stdlib.h> int main(void){ // 数値に変換できない文字を含んだ文字列 char s[] = "t10"; // 整数に変換 int i = atoi(s); long l = atol(s); long long ll = atoll(s); printf("int: %d\n", i); printf("long: %ld\n", l); printf("long long: %lld\n", ll); // 浮動小数点数に変換 double d = atof(s); printf("double: %f\n", d); }
実行結果
int: 0 long: 0 long long: 0 double: 0.000000
数値を文字列に変換する
数値型を文字列に変換するには snprintf()関数を使うと簡単です。
int snprintf(char * restrict s, size_t n, const char * restrict format, ...);
第一引数に結果を格納する文字列、第二引数に終端文字を含めた文字列の長さ、第三引数に変換する数値に対応した変換指定子、それ以降に変換する数値を指定します。
#include <stdio.h> int main(void){ // 変換した文字列を格納する変数 char buf[8]; // 変換する int型 の値 int i = 1234567; // int を 文字列 に変換 snprintf(buf, 8, "%d", i); // 出力 printf("%s\n", buf); }
実行結果
1234567
文字列の末尾には終端文字が格納されるので文字数に注意してください。文字数をピッタリ指定していると 1文字切れてしまう。
#include <stdio.h> int main(void){ // 変換した文字列を格納する変数 char buf[4]; // 変換する int型 の値 int i = 1234; // int を 文字列 に変換 snprintf(buf, 4, "%d", i); // 出力 printf("%s\n", buf); }
実行結果
123
また、複数の数値をまとめて変換することもできる。
#include <stdio.h> int main(void){ // 変換した文字列を格納する変数 char buf[16]; // 変換する数値 int i = 1234; long l = 5678; // 文字列 に変換 snprintf(buf, 16, "%d %ld", i, l); // 出力 printf("%s\n", buf); }
実行結果
1234 5678
まとめ
この記事では、C言語で文字列を数値に数値を文字列に変換する方法を解説しました。
数値から文字列への変換、または文字列から数値に変換するのに通常のキャストは行えないので注意しましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ


