誰でもchar配列を単一のintに変換する方法を知っていますか?
char hello[5];
hello = "12345";
int myNumber = convert_char_to_int(hello);
Printf("My number is: %d", myNumber);
文字列をintに変換する方法は複数あります。
ソリューション1:レガシーC機能の使用
int main()
{
//char hello[5];
//hello = "12345"; --->This wont compile
char hello[] = "12345";
Printf("My number is: %d", atoi(hello));
return 0;
}
解決策2:lexical_cast
(最も適切でシンプルな)を使用
int x = boost::lexical_cast<int>("12345");
ソリューション3:C++ Streams
を使用(
std::string hello("123");
std::stringstream str(hello);
int x;
str >> x;
if (!str)
{
// The conversion failed.
}
_C++11
_を使用している場合は、エラーと_"0"
_の解析を区別できるため、おそらくstoi
を使用する必要があります。
_try {
int number = std::stoi("1234abc");
} catch (std::exception const &e) {
// This could not be parsed into a number so an exception is thrown.
// atoi() would return 0, which is less helpful if it could be a valid value.
}
_
「1234abc」は、stoi()
に渡される前に 暗黙的に変換 が_char[]
_から_std:string
_になっていることに注意してください。
sscanf を使用します
/* sscanf example */
#include <stdio.h>
int main ()
{
char sentence []="Rudolph is 12 years old";
char str [20];
int i;
sscanf (sentence,"%s %*s %d",str,&i);
printf ("%s -> %d\n",str,i);
return 0;
}
依存関係のない実装に興味がある人のために、ここにこれを残しておきます。
inline int
stringLength (char *String)
{
int Count = 0;
while (*String ++) ++ Count;
return Count;
}
inline int
stringToInt (char *String)
{
int Integer = 0;
int Length = stringLength(String);
for (int Caret = Length - 1, Digit = 1; Caret >= 0; -- Caret, Digit *= 10)
{
if (String[Caret] == '-') return Integer * -1;
Integer += (String[Caret] - '0') * Digit;
}
return Integer;
}
負の値で動作しますが、非数値文字が混在している場合は処理できません(ただし、簡単に追加できるはずです)。整数のみ。
私が使う :
int convertToInt(char a[1000]){
int i = 0;
int num = 0;
while (a[i] != 0)
{
num = (a[i] - '0') + (num * 10);
i++;
}
return num;;
}