为什么模数运算符给出了错误的答案?

时间:2016-05-26 06:49:53

标签: c++ string io stringstream mod

#include<iostream>
#include<string>
#include<sstream>

using namespace std;

int main(){
    stringstream ss;
    ss << 32;
    string str = ss.str();
    cout << str << endl
         << str[0] << endl
         << str[1] <<endl
         << str[0]%10;
    return 0;
}

输出结果为:

  

32
3
2
1

相反,最后一行应该是3,因为3%10 = 3。

2 个答案:

答案 0 :(得分:5)

因为你将它与ascii值进行比较,它是51(0是48),modding给你1.你应该减去'0'或48,以便从汽车中获得实数。

答案 1 :(得分:3)

字符的表示形式与数字的表示形式不同。即使str[0]处的字符为3,也是字符3,其ASCII码(即其数字表示)为51.由于字符可以在执行需要整数的操作时隐式转换为整数,因此代码正在执行{ {1}}是1。