C++ C++;Atoi函数给出错误
我有一个有5个字符的字符串。我想将每个字符转换成int,然后将它们相乘。代码如下:C++ C++;Atoi函数给出错误,c++,atoi,C++,Atoi,我有一个有5个字符的字符串。我想将每个字符转换成int,然后将它们相乘。代码如下: int main() { int x; string str = "12345"; int a[5]; for(int i = 0; i < 5; i++) { a[i] = atoi(str[i]); } x = a[0]*a[1]*a[2]*a[3]*a[4]; cout<<x<<endl; } i
int main()
{
int x;
string str = "12345";
int a[5];
for(int i = 0; i < 5; i++)
{
a[i] = atoi(str[i]);
}
x = a[0]*a[1]*a[2]*a[3]*a[4];
cout<<x<<endl;
}
intmain()
{
int x;
字符串str=“12345”;
int a[5];
对于(int i=0;i<5;i++)
{
a[i]=atoi(str[i]);
}
x=a[0]*a[1]*a[2]*a[3]*a[4];
cout您可以使用:
a[i]=str[i]-“0”;
通过ASCII字符位置进行字符到数字的转换。str[i]
是char
不是char*
使用以下内容:-
int x;
std::string str = "12345";
int a[5];
for(int i = 0; i < 5; i++)
{
a[i] = str[i] -'0' ; // simply subtract 48 from char
}
x = a[0]*a[1]*a[2]*a[3]*a[4];
std::cout<<x<<std::endl;
intx;
std::string str=“12345”;
int a[5];
对于(int i=0;i<5;i++)
{
a[i]=str[i]'0';//只需从字符中减去48
}
x=a[0]*a[1]*a[2]*a[3]*a[4];
std::cout接受常量char*
(以空结尾的字符序列)
试着像这样改变
a[i]= str[i]-'0';
您提供的是单个字符
,因此编译器会抱怨请看这种方式
string str = "12345";
int value = atoistr.c_str());
// then do calculation an value in a loop
int temp=1;
while(value){
temp *= (value%10);
value/=10;
}
正确的方法是,不要自己滚动:
std::accumulate(std::begin(str), std::end(str), 1, [](int total, char c) {
return total * (c - '0'); //could also decide what to do with non-digits
});
这里有一个供您查看的示例。值得注意的是,该标准保证数字字符始终是连续的,因此从'0'
中的任何一个减去'0'
到'9'
将始终为您提供数值。atoi适用于字符串,而不是字符。只需使用-'0'
就可以了第1个,这不是严格的ASCII,C++不保证ASCII字符集,但它确实保证了这一点。如果不是ASCII,那么它是什么?并且不告诉它它是Unicode…还是它?Muhaha;)JoeDF可能是,在这里,代码> J’-I’<代码>不是< >代码> < <代码> >(和<代码> 'z’+' 1 < /COD>不是<代码> 26 < /COD>),但Irc<代码'1' -'0'=1 (并且直到->代码'''''''=9=9,/>代码>)始终是保证的(对于“数字字符”).至于C++中的EBCDIC,请看它仍然使用了很多(例如SabRE和VISA).我认为它是为真正的老IBM怪物和穿孔卡片?