如何在特定字符出现后从字符串中删除所有字符

时间:2013-11-18 20:01:23

标签: c++ string set

在下面的程序中,我需要插入字符串直到' |'集中的角色。

但在删除字符' |'在我的代码中,我无法跳过所有角色直到最后。

输入:+ 919845012345,0987654321,987654320 | 9845012345,+ 91987654321,0987654320,987654323,987654320

预期产量:+ 919845012345,0987654321,987654320

注意:(1)输入数据后,输入exit。       (2)子串函数不能用于此目的。

#include<iostream>
#include <unordered_set>
#include<string>
using namespace std;
int main()
{
string str;
string::iterator it;
unordered_set <string> s;


while(getline(cin,str)) //
    {
        if(str=="exit")
        {
              break;
        }

        for (it= str.begin(); it !=str.end(); it++)
        {
            if (*it =='|')
            {
                it = str.erase(it);

             }


        }
    s.insert(str);


    }


for ( unordered_set<string> ::const_iterator  itr = s.begin(); itr != s.end(); ++itr) {
    cout<<*itr<<endl;
}

return 1;
}

3 个答案:

答案 0 :(得分:1)

尝试使用string :: find_first_of 看这里: * http://www.cplusplus.com/reference/string/string/find_first_of/ *

使用上面的函数查找下一个分隔符“|”的索引并从范围(子字符串)创建一个字符串。 与替代方案相比,该方法也非常快。 另一种选择是在字符串的副本上使用C的strtok。

答案 1 :(得分:0)

我觉得没什么太难的了..

#include <iostream>

using namespace std;

int main()
{
    string myString = "+919845012345, 0987654321, 987654320|9845012345, +91987654321, 0987654320, 987654323, 987654320";

    for (unsigned int i = 0; (myString[i] != '|') && (i < myString.length()); i++)
        cout << myString[i];
    cout << endl;

    return 0;
}

答案 2 :(得分:0)

而不是代码

    for (it= str.begin(); it !=str.end(); it++)
    {
        if (*it =='|')
        {
            it = str.erase(it);

         }


    }

尝试使用

str.erase( str.find( '|' ) );

示范示例

    std::string s = "+919845012345, 0987654321, 987654320|9845012345, +91987654321, 0987654320, 987654323, 987654320";
    std::cout << s << std::endl;

    s.erase( s.find( '|' ) );
    std::cout << s << std::endl;

输出

+919845012345, 0987654321, 987654320|9845012345, +91987654321, 0987654320, 98765
4323, 987654320
+919845012345, 0987654321, 987654320