提问人:R_Squared 提问时间:4/23/2022 更新时间:4/23/2022 访问量:51
接受字符串的输入
Taking input of a string
问:
#include <bits/stdc++.h>
using namespace std;
string solve(string s){
cout << "inside solve";
for(int i=0; i<s.length(); i++){
int occur=0;
while(i+1 < s.length()){
if(s[i] == s[i+1])
occur++;
}
if(occur%2!=0 && occur%3!=0 && occur%5!=0)
return "no";
}
cout << "inside solve";
return "yes";
}
int main(){
ios_base::sync_with_stdio(0);
//cin.tie(0); cout.tie(0);
int tc;
cin >> tc;
//cout << tc;
while(tc--){
string s;
cin >> s;
//cout << "Inside main's while";
cout << solve(s);
}
return 0;
}
在我的主函数中,输入字符串后,什么也没发生。使用 cin >> s 有问题吗?同样,当我取消注释行 cin.tie(0);cout.tie(0); 它也不会进入内部,而循环。那么发生了什么?
答:
1赞
A M
4/23/2022
#1
你在这里有一个无限的循环:
while(i+1 < s.length()){
if(s[i] == s[i+1])
occur++;
}
“i”在 lopp 中未被修改。循环将永远运行。条件始终为真。
使用第二个变量 k=i+1,在 while 循环中取此值,并将 s[i] 与 s[k++] 进行比较。
不要继续与这些所谓的“竞争方”合作
上一个:CPP项目背景等待工作
下一个:在命令行中找不到或加载主类错误
评论
s[i] == s[i+1]
将在某个时候引用字符串之外的内存,这是未定义的行为。另外:什么是调试器?while(i+1 < s.length())
应限制范围以保持在范围内。此外,在循环中不递增有助于防止它到达任何地方,更不用说越界了。i+1
i
while