c++一个算出字符串的问题

来源:互联网  时间:2016/8/29 15:30:43

关于网友提出的“ 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是提取子字符串,并不是删除子字符串返回剩余的字符串。

解决方案2:

调高你的编译器警告等级,这种代码应该立刻发出警告

while(p=s.find_first_of(b,p)!=string::npos)
{  
    count++;
    p++;
}

而且单步调试应该很快发现问题:p的值一直不变,准确的说是在1和2之间变化,导致在上述输入下循环达不到终止条件。
如果不能百分百确定运算符之间的优先顺序,那就加括号,不要写出这样暧昧不清的代码。
另外substr并不能达到你期望的效果,你需要的是erase。 解决方案3:


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;
}
解决方案4:


    while(a1=s.find_first_of(b)!=string ::npos)
    {
        s=s.substr(a1,len2); // 此句之后,s 与 b 相等,然后进入死循环
    }
解决方案5:

仅供参考:

#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":
//

上一篇图片的颜色如何界定
下一篇vector容器的迭代器失效问题
明星图片
相关文章
《 c++一个算出字符串的问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)