0

私は現在C++でコードに取り組んでいます。このコードでは、数値の文字列を受け取り、それを整数に変換してからその値を返す関数を作成することになっています。たとえば、「4569」を文字列として渡すと、4569 整数値が返されます。誰かが私が間違っているところを指摘するのを手伝ってもらえますか??? 前もって感謝します :)

#include<iostream>
#include<cstdlib>
using namespace std;

void getInput(char arr[] , int size )
{
    cout<<"ENTER THE ARRAY"<<endl;
    cin.getline(arr,size);

}

int stringToInteger(char source[])
{
    int sum = 0;
    int y=strlen(source);
    int multiply = 1;
    for( int i=y ; i>=0 ; i--)
    {
        int n= source[i];
        sum = (sum + (n * multiply));
        multiply = (multiply *10);
    }
    return sum;
}

int main()
{
    const int size =100;
    char inputArr [size];
    getInput (inputArr, size );

    int x = stringToInteger (inputArr );
    cout<<"THE RETURNED INTEGER VALUE IS"<<endl;
    cout<<x<<endl;
    return 0;
}
4

4 に答える 4

0

--を呼び出す必要はありませんstrlen。ライブラリ関数 (上記のatoiおよびstrtol) の使用が許可されるまでは、これを使用できます。

int stringToInteger(char *source)
{
  int sum = 0;
  if (source)
    while (*source >= '0' && *source <= '9')
    {
      sum = 10*sum + *source - '0';
      source++;
    }
  return sum;
}

他のほぼすべての回答で暗示されているように、ASCII 文字 '0' とバイナリ値の間に違いがあることを忘れていました0

于 2013-08-14T20:25:58.960 に答える
0

atoiまたはを使用していない理由はわかりませんstd::stoiが、アルゴリズムには論理的な欠陥があります。

int stringToInteger(char source[])
{
    int sum = 0;
    int y=strlen(source);
    int multiply = 1;
    for(int i=y - 1; i >= 0; i--) // you were starting at y, which is 1 passed the end of the array
    {
        int n = (int)(source[i] - '0');
        sum += (n * multiply); // += makes this more readable
        multiply *= 10; // same with  *=
    }
    return sum;
}

とはいえ、これが宿題以外のものである場合は、 https://stackoverflow.com/a/18238566/529761またはhttps://stackoverflow.com/a/18238682/529761に投稿されたソリューションを使用する必要があります(あなたの言語要件)。

また、この変更にも潜在的な問題が 1sourceつあります。数字以外の文字が含まれていると、正しく動作しません。そこにいるべきではないキャラクターに遭遇した場合、それにアプローチする簡単な方法は、ブレイクアウトすることです。

int stringToInteger(char source[])
{
    int sum = 0;
    int y=strlen(source);
    int multiply = 1;
    for(int i=y - 1; i >= 0; i--) // you were starting at y, which is 1 passed the end of the array
    {
        int n = (int)(source[i] - '0');
        if (n < 0 || n > 9)
            break;
        sum += (n * multiply); // += makes this more readable
        multiply *= 10; // same with  *=
    }
    return sum;
} 
于 2013-08-14T18:04:20.303 に答える