鱼C论坛

 找回密码
 立即注册
查看: 959|回复: 2

[已解决]为什么会有警告啊

[复制链接]
发表于 2023-11-13 00:25:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=101;
string a[N];
int main()
{
    cin>>n;
    string s;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    int pos=-1;
    for(int i=0;i<n;i++)
    {
        int cnt=0,ans=0;
        while((pos=a[i].find('ab',pos))!=-1)
        {
            cnt++; //
        }
        while (pos=a[i].find('ba',pos)!=-1)
        {
            ans++;
        }
        if(a[i].size()==1)cout<<a[i];
        if(cnt==ans)cout<<a[i];
        
        
    }
    



}
最佳答案
2023-11-13 00:26:06
这段代码会产生警告的原因在于使用了未初始化的变量并且未能正确地对字符串搜索进行处理。警告中可能包含了以下问题:

1. pos 变量在使用前并未初始化,应该在每次循环开始时将其置为 -1。
2. 在 while 循环内部,pos 变量在进行字符串查找后需要正确更新,以便下一次查找从上一次结束的位置继续而不是从头开始。

此外,建议不要在生产代码中使用 #include <bits/stdc++.h>,这是非标准的用法,会使代码在不同编译环境下的行为不确定。正确的做法是只包含所需的头文件,比如 #include <iostream>#include <string>

以下是修改后的代码,包括了对 pos 变量的初始化和更新,以及修复了字符串搜索的问题:
#include <iostream>#include <string>using namespace std;int main() {    int n;    const int N = 101;    string a[N];        cin >> n;    for (int i = 0; i < n; i++) {        cin >> a[i];    }    for (int i = 0; i < n; i++) {        int pos = -1;        int cnt = 0, ans = 0;        while ((pos = a[i].find('ab', pos + 1)) != string::npos) {            cnt++;        }        pos = -1; // 重置 pos        while ((pos = a[i].find('ba', pos + 1)) != string::npos) {            ans++;        }        if (a[i].size() == 1) {            cout << a[i];        }        if (cnt == ans) {            cout << a[i];        }    }    return 0;}
希望这可以帮助你解决警告问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 00:25:45 | 显示全部楼层
这段代码出现警告的原因是因为在while循环中的赋值语句  (pos=a[ i].find('ba',pos)!=-1)  可能会导致预期之外的行为。为了避免这个警告,你可以使用括号来明确表达赋值和比较的优先级。

正确的写法应该是  (pos=a[ i].find('ba',pos)) != -1 。

修改后的代码如下:
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=101;
string a[N];
int main()
{
    cin>>n;
    string s;
    for(int i=0;i<n;i++)
    {
        cin>>a[ i];
    }
    int pos=-1;
    for(int i=0;i<n;i++)
    {
        int cnt=0,ans=0;
        while((pos=a[ i].find('ab',pos))!=-1)
        {
            cnt++; //
        }
        while ((pos=a[ i].find('ba',pos)) != -1)
        {
            ans++;
        }
        if(a[ i].size()==1) cout<<a[ i];
        if(cnt==ans) cout<<a[ i];
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 00:26:06 | 显示全部楼层    本楼为最佳答案   
这段代码会产生警告的原因在于使用了未初始化的变量并且未能正确地对字符串搜索进行处理。警告中可能包含了以下问题:

1. pos 变量在使用前并未初始化,应该在每次循环开始时将其置为 -1。
2. 在 while 循环内部,pos 变量在进行字符串查找后需要正确更新,以便下一次查找从上一次结束的位置继续而不是从头开始。

此外,建议不要在生产代码中使用 #include <bits/stdc++.h>,这是非标准的用法,会使代码在不同编译环境下的行为不确定。正确的做法是只包含所需的头文件,比如 #include <iostream>#include <string>

以下是修改后的代码,包括了对 pos 变量的初始化和更新,以及修复了字符串搜索的问题:
#include <iostream>#include <string>using namespace std;int main() {    int n;    const int N = 101;    string a[N];        cin >> n;    for (int i = 0; i < n; i++) {        cin >> a[i];    }    for (int i = 0; i < n; i++) {        int pos = -1;        int cnt = 0, ans = 0;        while ((pos = a[i].find('ab', pos + 1)) != string::npos) {            cnt++;        }        pos = -1; // 重置 pos        while ((pos = a[i].find('ba', pos + 1)) != string::npos) {            ans++;        }        if (a[i].size() == 1) {            cout << a[i];        }        if (cnt == ans) {            cout << a[i];        }    }    return 0;}
希望这可以帮助你解决警告问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 09:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表