C++新手求助:如何判断整数是否存在于字符串中?
解决整数x在拼接字符串中的计数问题
问题根源
你的代码有两个核心问题导致count始终为0:
- 字符与整数的类型不匹配:字符串
num里的每个元素是字符型数字(比如'1'的ASCII值是49),而你直接拿它和整数x(比如1)比较,两者数值完全不同,永远不会相等。 - 循环越界:第二个for循环的条件
i <= num.size()错误,字符串下标从0开始,最大有效下标是num.size()-1,这个条件会让你访问到字符串末尾之外的内存,可能引发未知错误。
修正后的代码
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { int n, x; cin >> n >> x; string num; int count = 0; for (int i = 1; i <= n; i++) { num.append(to_string(i)); } // 把整数x转成对应的字符,比如x=3转成'3' char target = '0' + x; // 修正循环条件,避免越界 for (int i = 0; i < num.size(); i++) { if (num[i] == target) { count += 1; } } cout << num << endl; cout << count << endl; return 0; }
关键修改说明
- 类型转换:用
'0' + x把整数x转成对应的字符。因为字符'0'到'9'的ASCII值是连续的,比如'0'是48,加3就得到51,也就是字符'3'的ASCII值,这样就能和字符串里的字符正确比较了。 - 循环条件修正:把
i <= num.size()改成i < num.size(),确保只访问字符串的有效下标范围。
如果你想换一种思路,也可以把字符串里的字符转成整数再和x比较,比如(num[i] - '0') == x,效果是一样的,哪种好懂用哪种就行。
内容的提问来源于stack exchange,提问作者asqweermayyam
相关产品推荐
相关产品推荐

