TypechoJoeTheme

Yuuuuuu

C++中字符串转数字

CCF认证里有一题需要用到字符串转数字,于是我定义了一个string类型的变量,然后当做Char型数组用。
但是在转换到整型数字时,发现了一点点问题。

先看代码

#include <bits/stdc++.h> 
using namespace std;

int main(){
    string s;
    cin>>s;
    int sum=0,j=1;
    //注意这个循环里
    for(int i=0; i<(int)s.length()-1; i++){
    sum += (s[i] - '0') * j++;    //这里为什么不是sum += s[i] * j++,而是需要先减去'0'。否则结果偏大
    }
    cout<<sum<<endl;
    return 0;
}

在这里字符(串)转int整型时需要先减去'0',而且int整型转字符(串)时同样也需要在后面加上一个'0',如下

    char c;
    c = 10 % 3;
    c = c + '0';    //注释这一段之后输出的为 ASCII表中 1 所代表的特殊符号
    cout<<c<<endl;    //此时输出结果为 1

看完这张表我就突然发现问题了

当把字符转直接转换成十进制数字时,比如把字符'1'转换成1,此时字符'1'所对应的十进制数字其实是十进制当中的49,因此直接把字符当整型计算的话 得到的结果自然会偏大了。

赞(0)
评论 (0)