如何使用C ++在字符串中存储字符

时间:2014-07-16 09:01:21

标签: c++ string

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 中进行进一步的字符串操作。能帮我告诉我怎么办?

6 个答案:

答案 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)

您可以使用substr创建find

从看起来像这样的字符串开始;

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"