size_t parameterStart_pos = str.find(searchIdentifier);
char sa = str.at(parameterStart_pos);
while (str.at(parameterStart_pos) != ';') {
sa=str.at(parameterStart_pos);
parameterStart_pos++;
}
这是示例代码,在该示例代码中,它查找标识符名称并从该位置迭代每个 char ,直到带有分隔符的行尾“;”
我想要做的是存储“parameterStart_pos”中的所有字符,直到找到“;”在 string 中进行进一步的字符串操作。能帮我告诉我怎么办?
答案 0 :(得分:0)
将传递的每个字符复制到另一个字符串中:
std::string result;
while (str.at(parameterStart_pos) != ';')
{
result += str.at(parameterStart_pos);
++parameterStart_pos;
}
result
现在包含您的字符串
答案 1 :(得分:0)
这是更新的代码:
size_t parameterStart_pos = str.find(searchIdentifier);
char sa = str.at(parameterStart_pos);
string newStr = "";
while (str.at(parameterStart_pos)!=';'){
sa=str.at(parameterStart_pos);
newStr += sa;
parameterStart_pos++;
}
答案 2 :(得分:0)
1:采用字符串变量std::string res
2:将字符串包含在字符串中。
res.append(SA);
答案 3 :(得分:0)
如果要将 parameterStart_pos 中的所有字符存储到字符串结果中的; ,您可以执行以下操作:
size_t parameterStart_pos = str.find(searchIdentifier);
size_t end = str.find(';');
std::string result{str,parameterStart_pos,end - parameterStart_pos};
答案 4 :(得分:0)
您不需要自己手动复制代码。 C ++标准库可满足您的所有需求:
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int main(void)
{
string s1("1234567890,abcdefghijkl;mnopqrstuvwxyz");
string s2;
auto startpos = find(s1.begin(), s1.end(), ',');
startpos++; // ignore the ","
auto endpos = find(s1.begin(), s1.end(), ';');
s2.resize(endpos-startpos);
copy(startpos, endpos, s2.begin());
cout << "s1" << s1 << '\n';
cout << "s2" << s2 << '\n';
}
答案 5 :(得分:0)
从看起来像这样的字符串开始;
std::string s1 = "to skip over; p1 -a -b -c; p2 -d -e; junk chars";
你可以做;
size_t start = s1.find("p1");
size_t len = s1.find(';', start) - start;
std::string s2 = s1.substr(start, len);
使s2
等于'p1 -a -b -c'
和;
start = s1.find("p2");
len = s1.find(';', start) - start;
std::string s3 = s1.substr(start, len);
使s3
等于'p2 -d -e'
。
然后抓住剩余 ' junk chars'
std::string leftover = s1.substr(start + len + 1);
离开你:
s2 == "p1 -a -b -c"
s3 == "p2 -d -e"
leftover == " junk chars"
另一种方法可能是sstream并使用std::stringstream
这与上一个示例相同(差异很小);
std::stringstream ss(s1);
std::getline(ss, leftover, ss.widen(';')); // to skip over;
std::getline(ss, s2, ss.widen(';'));
std::getline(ss, s3, ss.widen(';'));
std::getline(ss, leftover);
不同之处在于你;
s2 == " p1 -a -b -c" // <--- has space
s3 == " p2 -d -e" // <---- now!
leftover == " junk chars"