解答旋转词问题bug改造过程

大家先看代码:

#include
using namespace std;

int main(){
    int a,b;
    string c,d,count=1;
    cin >> a >> b;
        cin >> c;
        cin >> d;
         if(a!=b){
        cout << "No";
    }else{
        string str= c+c;
        for(int i=0;i<a;i++){
            string str2 = str.substr(i,a);
            if(str2==d){
                cout<<"YES";//为什么这个明明赋值为一可是并没有等于一
            }else{
                count=0;
            }
        }
        if(count==0){
            cout << "No";
        }
    }
    return 0;
}

这段代码中的问题在于 count 初始化时赋值为字符串 “1”,而不是整数 1。这意味着在后续的比较中,count 与整数进行比较时会发生类型错误。
解答旋转词问题bug改造过程_第1张图片

正确的做法应该是将 count 声明为整数,并将初始化时的值设置为 1。即:

int count = 1;

此外,代码中应该添加一些必要的注释,使得代码更加易读易懂。同时还需要对代码进行测试和调试,以确保其能够正确运行并处理各种不同的输入情况。

#include
using namespace std;

int main(){
    int a,b,count=0;
    string c,d;
    cin >> a >> b;
        cin >> c;
        cin >> d;
         if(a!=b){
        cout << "No";
    }else{
        string str= c+c;
        for(int i=0;i<a;i++){
            string str2 = str.substr(i,a);
            if(str2==d){
                cout<<"YES";//为什么这个明明赋值为一可是并没有等于一
            }else{
                count++;
            }
        }
        if(count!=0){
            cout << "No";
        }
    }
    return 0;
}

这个明明count++了为什么跳出if还是变成0最后还是会执行

if(count!=0){
cout << “No”;
}

其实在我的代码中,虽然在循环中 count++count 的值进行了累加,但是我在判断 count 是否为 0 的条件上出现了问题。

在原始代码中,使用 if(count!=0) 判断 count 是否不等于 0,如果成立,则输出 "No"。这是一个逻辑上的误解。

实际上,在这个问题中,如果 count!=0,表示在循环中找到了至少一个位置开始的子串与目标字串不相等。那么我们可以在循环结束后输出 "No",因为这意味着无法找到符合条件的子串。

所以判断条件应该修改为 if(count==a)。如果 count 等于输入的字符串长度 a,则输出 "No"。这样才能正确地判断是否找到了符合条件的子串。

修改后的代码如下:

#include
using namespace std;

int main(){
    int a, b, count = 0;
    string c, d;
    cin >> a >> b;
    cin >> c;
    cin >> d;
    
    if(a != b){
        cout << "No";
    }else{
        string str = c + c;
        for(int i = 0; i < a; i++){
            string str2 = str.substr(i, a);
            if(str2 == d){
                cout << "YES";
                return 0;  // 找到符合条件的子串,直接退出程序
            }else{
                count++;
            }
        }
        
        if(count == a){
            cout << "No";
        }
    }
    return 0;
}

这个明明count++了为什么跳出if还是变成0最后还是会执行
if(count!=0){
cout << “No”;
}
这样修改后,当找到符合条件的子串时会输出 "YES" 并退出程序,否则会输出 "No"

其实也可以这样

#include//-旋转词问题
using namespace std;

int main(){
    int a,b,count=0;
    string c,d;
    cin >> a >> b;
        cin >> c;
        cin >> d;
         if(a!=b){
        cout << "NO";
    }else{
        string str= c+c;
        for(int i=0;i

你可能感兴趣的:(bug,算法)