c++中查找字符串的函数是否只对第一个字符起作用?

does function find in strings in c++ work only with the first char?

本文关键字:第一个 字符 起作用 是否 查找 字符串 函数 c++      更新时间:2023-10-16

我想在一个由数字和字符组成的string中找到一个char,如果它发现程序做了一些操作,但是当我使用函数find()时,如果我要查找的字符仅在开头字符串!!!!!,它只返回true

这是问题的一部分!
用户输入3个字符串s1, s2, s3;在前两个字符串之间有char 'a' = '+',在s2和s3之间有char 'b' = '='(这三个字符串应该是数字),但如果s2是一个包含字母'm'的单词,程序将s1和s3转换为整数并写入完整的操作例如:如果i/p是3247 + 5machula2 = 3749那么0/p = 3247 + 502 = 3749

这是我想解决的问题http://www.spoj.com/problems/ABSYS/这部分代码有问题:

int T;
int x,y,z;
string s1 ;
string s2  , s3 ;
char a , b;
cin>>T;
for(int i=0 ; i<T ; i++)
{
         cin>>s1>>a>>s2>>b>>s3;

for (int k=0; k<s2.size(); k++)
{ 
    if (k==s2.find("m"))
    {     
        stringstream ss(s1);
        stringstream ss3(s3);
        ss>>x;
        ss3>>z;
        cout<<s1<<" "<<a<<" "<<z-x<<" "<<b<<" "<<s3<<endl;
    }   
    else break;       
}

这是一个循环,在第二个字符串上循环,如果它找到一个char 'm',它应该做上面提到的,但这里的问题是,它只在'm'在字符串的开头而不是其他地方工作。

您的else break;防止循环永远循环

它只在开头时起作用的原因是,如果它不在开头,则跳出循环,因此它没有机会检查其余部分:

[first iteration]
if (0 == s2.find("m")) //if found at beginning
    //do stuff
else break; //exit loop if not found at beginning

代替循环,如果你只是想看看是否有一个m,只需使用find():

if (s2.find('m') != std::string::npos)
    //"m" found in string, do the operations on s1 and s3