解释为什么报错bool Rea(string s) { string s1; int num=s.size(); int n=0; for(int i=0;i<num-2;i++) { s1=s.substr(i,i+2); s=s.substr(s.find(s1)+1,s.size()); if(s.find(s1)) { return false; } } }
时间: 2023-12-06 17:44:38 浏览: 127
该函数缺少返回语句,如果所有的if条件都不满足,则该函数不会返回任何值。因此,你需要在函数的末尾添加一个默认的返回值(例如,返回true),以确保函数始终返回一个值。同时,还需要注意s.find()函数的返回值,如果查找不到目标字符串,s.find()函数会返回一个特殊的值string::npos,因此在判断s.find(s1)的返回值时,应该使用该特殊值来进行判断。下面是修改后的代码:
```
bool Rea(string s) {
string s1;
int num=s.size();
int n=0;
for(int i=0;i<num-2;i++) {
s1=s.substr(i,i+2);
s=s.substr(s.find(s1)+1,s.size());
if(s.find(s1)!=string::npos) {
return false;
}
}
return true;
}
```
相关问题
为什么报错bool Rea(string s) { string s1; int num=s.size(); int n=0; for(int i=0;i<num-2;i++) { s1=s.substr(i,i+2); s=s.substr(s.find(s1)+1,s.size()); if(s.find(s1)) { return false; //break; } } return true; }
您的代码中出现了两个问题。
第一个问题是 `s.substr(i,i+2)`,这行代码的意思是从 s 的第 i 个字符开始,取两个字符组成一个新的字符串。但是,第二个参数应该是要取的字符数,所以应该改为 `s.substr(i,2)`。
第二个问题是 `if(s.find(s1))`,这行代码的意思是如果 s1 在 s 中出现过,则返回 true,否则返回 false。但是,string::find() 函数的返回值是查找到的子串在父串中的位置,如果没有查找到,则返回 string::npos。因此,应该改为 `if(s.find(s1) != string::npos)`。
下面是修改后的代码:
```
bool Rea(string s) {
string s1;
int num = s.size();
for(int i = 0; i < num - 1; i++) {
s1 = s.substr(i, 2);
s = s.substr(s.find(s1) + 1);
if(s.find(s1) != string::npos) {
return false;
}
}
return true;
}
```
阅读全文