关于网友提出的“ c++一个算出字符串的问题”问题疑问,本网通过在网上对“ c++一个算出字符串的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: c++一个算出字符串的问题描述:
c++string
问题如下://输入:abcdcde cd
//输出:2 abe
//输入两个字符串,找出在第一个字符串中,有多少个第二个子串,输出个数,并输出删除全部第二个子串后的字符串。
#include
#include
using namespace std;
void dele(string s,string b)
{
int i=0;
string::size_type p,a1;
int len1=s.size();
int len2=b.size();
int count=0;
p=0;
while(p=s.find_first_of(b,p)!=string::npos)
{
count++;
p++;
}
while(a1=s.find_first_of(b)!=string ::npos)
{
s=s.substr(a1,len2);
}
cout<<><>
cout<<>
}
int main()
{
string s,b;
cin>>s;
cin>>b;
cout<<><>
cout<<>
dele(s,b);
system("pause");
return 0;
}
为什么运行不到结果,只能运行到dele函数调用前一步,dele的结果不显示 请问为什么?谁能帮我解答下
解决方案1:
p=s.find_first_of(b,p)!=string::npos 错,逻辑运行符优先级高于赋值运行符,后同。
substr是提取子字符串,并不是删除子字符串返回剩余的字符串。
调高你的编译器警告等级,这种代码应该立刻发出警告
while(p=s.find_first_of(b,p)!=string::npos)
{
count++;
p++;
}
而且单步调试应该很快发现问题:p的值一直不变,准确的说是在1和2之间变化,导致在上述输入下循环达不到终止条件。
如果不能百分百确定运算符之间的优先顺序,那就加括号,不要写出这样暧昧不清的代码。
另外substr并不能达到你期望的效果,你需要的是erase。 解决方案3:
解决方案4:
int main()
{
std::string s = "abcdcde";
std::string s1 = "cd";
size_t n = 0;
size_t pos = 0;
while((pos = s.find(s1, pos)) != std::string::npos)
{
n++;
s.erase(pos, s1.size());
}
std::cout << n << " " << s;
system("pause");
return 0;
}
解决方案5:
while(a1=s.find_first_of(b)!=string ::npos)
{
s=s.substr(a1,len2); // 此句之后,s 与 b 相等,然后进入死循环
}
仅供参考:
#include
#include
char s[256];
char *p;
int r,n,i;
int main() {
while (1) {
printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
fgets(s,256,stdin);
if ('\n'==s[0]) break;
p=s;
while (1) {
p=strstr(p,"%20");
if (p) {
memmove(p+1,p+3,strlen(p)-3+1);
p[0]=' ';
} else break;
}
p=s;
while (1) {
p=strstr(p,"你懂得");
if (p) {
memmove(p+6,p+6,strlen(p)-6+1);
for (i=0;i<6;i++) p[i]='X';
} else break;
}
printf("%s",s);
}
return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//