【发布时间】:2019-02-08 23:51:47
【问题描述】:
下面的代码 sn-p 应该遍历一个字符串(单词)向量,如果字符串包含一个整数,它应该将 int 推入一个仅包含这些数字的整数向量(nums)。
for (int i = 0; i < words.size(); i++){
for(int j = 0; j < words.at(i).size(); j++){
if (isdigit(words[i][j])){
nums.push_back(words[i][j]);
}
}
cout << words.at(i) << endl;
}
我收到了一个文件,上面有文字。我的代码成功地从文件中提取单词并将它们放在向量中。但是,我的 isdigit() 函数没有返回预期值。话是ho1d h4m, 舞蹈2, 8st, 下一个, 最重要的, se3d, tes7,我对 nums 向量的期望值为 1、4、2、8、6、3、7。这是我的打印 sn-p:
for (int i = 0; i < nums.size(); i++){
cout << nums.at(i) << " ";
}
但它返回的值是 49 52 50 56 54 51 55。编辑:刚刚认识到这些是 ascii 值。如何防止他们推送 ascii 值而不是整数?我什至尝试使用 get() 函数并在读取输入时遍历每个字符而不是每一行,我仍然得到相同的返回值。我哪里错了?
【问题讨论】:
-
看看这些数字。您是否看到了如何将这些数字转换为整数的模式(即使 ASCII 值是整数)?有没有想到数字
48或字符'0'? -
数值0到9与字符
'0'到'9'有区别。 -
如果找到两位或更多位的代码应该怎么做?它们是分开处理还是作为一个更大的整数处理?
标签: c++