c++中查找字符串的函数是否只对第一个字符起作用?
does function find in strings in c++ work only with the first char?
我想在一个由数字和字符组成的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
相关文章:
- 如何忽略第一个字符输入后的所有内容
- 增量生成 - 错误:字符串的第一个字符应'0'或'1'
- 对c++中的输入使用getline函数时忽略第一个字符
- C++如何通过忽略每行的第一个字符来读取 unicode 文件
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- 检索字符串的第一个字符,并在C++中按字母顺序进行比较
- 这个RLE解码功能只解码第一个字符,我做错了什么?
- 如何忽略除第一个字符之外的所有字符
- C++ 如何从用户输入中读取第一个字符并忽略 rest(字符类型)
- CIN.IGNORE删除第一个字符的第二次函数被调用
- 使用CTYPES将字符串从Python传递到C - 仅发送第一个字符
- 为什么在使用循环时忽略输入的第一个字符
- 仅将输入的第一个字符用于 char 变量
- getline删除第一个字符;删除cin.ignore();无法解决
- 仅分配第一个字符,将 LPCTSTR 转换为字符*
- 如何获取指向字符数组中第一个字符的常量指针
- 访问没有字符的字符串的第一个字符
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 文本文件中的第一个字符会导致 .substr() 错误
- RegSetValueEx 仅显示写入第一个字符