0

この演習では、0 ~ 9 の数字のユーザー入力を整数または文字列としてそれぞれ文字列または整数に変換できるコードを要求します。つまり、0入力された場合は"zero"出力され、その逆も同様です。

string number;

cout << "Let's convert strings to numbers."
     << "Enter value/string of 0-9";

while (number!= "exit")
{
    cin >> number;

    for (int i=0; i < digits.size(); i++) 
    {
        if (number == digits[i]) cout << i << endl;
    }   


    if (number == "0")      cout << digits[0] << endl;
    else if (number == "1") cout << digits[1] << endl;
    else if (number == "2") cout << digits[2] << endl;
    else if (number == "3") cout << digits[3] << endl;
    else if (number == "4") cout << digits[4] << endl;  
    else if (number == "5") cout << digits[5] << endl;  
    else if (number == "6") cout << digits[6] << endl;  
    else if (number == "7") cout << digits[7] << endl;
    else if (number == "8") cout << digits[8] << endl;  
    else if (number == "9") cout << digits[9] << endl;  
}

digits は文字列などを格納するベクトル クラスです"zero""one"

このコードは正常に動作しますが、ステートメントの長いチェーンは好きではありませんif/else ifが、整数を文字列に変換する方法がわかりません。誰かがこれをより効率的にするのを手伝ってくれますか? ありがとう!

4

3 に答える 3

3

if number == "0"あなたはそれnumber[0] == '0'を使うことができますchar

ei 代わりに if/else ステートメント:

if (number[0] >= '0' && number[0] <= '9' )
  std::cout << digits[number[0] - '0'] << std::endl;
else
  std::cout << "wrong input - needs to be digit" << std::endl;

stringは基本的に文字std::stringの配列であり、タイプの文字の配列ですchar。たとえば、これらはcまたはc ++で文字列を宣言および初期化する2つの正当な方法です

char s[3] = { '0', '1', '\0' }; 
char s[3] = "01";

Char 値は、技術的には整数 (またはむしろバイト) であり、文字コードを何らかのエンコーディング (通常は ASCII) で格納します。例えば、'0'の文字コードは48'1'の文字コードは49'2'50です。そして、私たちはこれを使用します。

'3' - '0' = 51 - 48 = 3
于 2012-10-07T10:42:50.957 に答える
1

digits[number[0] - 48]if/else if を取り除くためにできることがあります。

于 2012-10-07T10:38:31.643 に答える
0

isdigit を使用して、0-9 かどうかを確認してください http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

それが数字の場合は、aoti http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/を使用して int に変換できます。

そして最後に言うだけ

cout << digits[aoti(number)];
于 2012-10-07T20:02:14.373 に答える