多次使用string :: find在同一个字符串中

时间:2017-03-04 11:02:12

标签: c++ string

这是一个从字符串中提取数据的程序。

size_t pos;
string str = "2,1,4,9,5";
string str1 = str;

从第二个逗号删除到结束:

for (int i = 0; i<2; i++){
    pos = str1.find(",");
}
str1.erase(str1.begin() + pos, str1.end());

从头到尾删除逗号:

for (int j = 0; j < 1; j++){
    pos = str1.find(",");
}
str1 = str1.substr(pos + 1);

所以现在str1应为"1"

将其转换为int:

int digit;
stringstream converter;
converter << str1;
converter >> digit;
cout << digit << endl;
converter.clear();

我意识到str1不等于&#34; 1&#34;因为在str1.find(",")它没有从头开始搜索,但它从它离开的地方开始。

我的问题是,如何在不初始化更多字符串string::find等的情况下从字符串的开头进行str2=str; str3=str;搜索。

2 个答案:

答案 0 :(得分:1)

问题在于您希望此代码执行的操作:

for (int i = 0; i<2; i++) {
    pos = str1.find(",");
}
  

从第二个逗号删除到结束:

显然你认为这会找到第一个','然后找到第二个','(当我= = 1时),而这将同时找到第一个','。以下代码:

str1.erase(str1.begin() + pos, str1.end());
因此,

将从您的字符串中删除,1,4,9,5

一种解决方案是替换

for (int i = 0; i<2; i++) {
    pos = str1.find(",");
}

通过

pos = str1.find(",", 3);

同样替换它(只执行一次)

for (int j = 0; j < 1; j++) {
    pos = str1.find(",");
}

由此:

pos = str1.find_last_of(",");

你的目标是提取一个数字,如果想要的数字不是第二个数字(就像在这个特殊情况下),你将要删除所有以前的数字,所以搜索最后一个逗号。 将posstring::npos

进行比较也是一种很好的做法

答案 1 :(得分:0)

string:如果你没有指定起始位置,find应该从头开始搜索。

std::string::find