在下面的程序中,我需要插入字符串直到' |'集中的角色。
但在删除字符' |'在我的代码中,我无法跳过所有角色直到最后。
输入:+ 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;
}
答案 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