解释为什么报错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 11:44:38 浏览: 35
该函数缺少返回语句,如果所有的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;
}
```
int.TryParse (String s,out int num.)怎样接收参数,用bool还是int
`int.TryParse(String s, out int num)`方法用于将字符串转换为整数。它的第一个参数是要转换的字符串,第二个参数是输出参数,用于存储转换后的整数。如果转换成功,返回值为`true`,并且`num`参数会被赋值为转换后的整数;如果转换失败,返回值为`false`,并且`num`参数的值为默认值0。
因此,你可以使用`bool`类型的变量来接收`int.TryParse`方法的返回值,用于判断转换是否成功,而使用`int`类型的变量作为`out`参数,用于存储转换后的整数。例如:
```csharp
string str = "123";
int num;
bool success = int.TryParse(str, out num);
if (success) {
Console.WriteLine("转换成功,num的值为:" + num);
} else {
Console.WriteLine("转换失败!");
}
```