这是一个从字符串中提取数据的程序。
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;
搜索。
答案 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(",");
你的目标是提取一个数字,如果想要的数字不是第二个数字(就像在这个特殊情况下),你将要删除所有以前的数字,所以搜索最后一个逗号。
将pos
与string::npos
答案 1 :(得分:0)
string:如果你没有指定起始位置,find应该从头开始搜索。