web-dev-qa-db-ja.com

文字配列を単一の整数に変換しますか?

誰でもchar配列を単一のintに変換する方法を知っていますか?

char hello[5];
hello = "12345";

int myNumber = convert_char_to_int(hello);
Printf("My number is: %d", myNumber);
22
IsThisTheEnd

文字列を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.      
} 
34
Alok Save

_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_になっていることに注意してください。

6
Rick Smith

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;
}
1
Sergei Kurenkov

依存関係のない実装に興味がある人のために、ここにこれを残しておきます。

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;
    }

負の値で動作しますが、非数値文字が混在している場合は処理できません(ただし、簡単に追加できるはずです)。整数のみ。

0
Holly

私が使う :

int convertToInt(char a[1000]){
    int i = 0;
    int num = 0;
    while (a[i] != 0)
    {
        num =  (a[i] - '0')  + (num * 10);
        i++;
    }
    return num;;
}
0
Trần Hiệp