【发布时间】:2019-05-22 15:07:24
【问题描述】:
我的问题很简单,但我无法理解它。
我当然是在互联网上搜索,但我找到的所有解决方案都使用 std::vectors 并且我不允许使用它们。
我有以下字符串:
std::string str "Tom and Jerry";
我想用空格作为分隔符来分割这个字符串,然后将这三个单词分配到三个不同的字符串中。
//this is what I am trying to achieve
std::string substr1 = "Tom";
std::string substr1 = "and";
std::string substr1 = "Jerry";
这就是我用空格作为分隔符来分割字符串的方式:
std::string buf;
std::string background;
std::stringstream ss(str);
while (ss >> buf) {
if (buf == " ")
background = buf; // don't really understand that part
std::cout << "splitted strings: " << buf << std::endl;
}
但我不知道应该何时以及如何将拆分的字符串分配给 substr1、substr2、substr3。谁能解释我应该如何将字符串分配部分投入其中?
我尝试了一些奇怪的东西,例如:
std::string substr1, substr2, substr3;
int counter = 1;
while (ss >> buf) {
if (buf == " ")
background = buf; // don't really understand that part
counter = 1;
if (counter == 1) {
substr1 = buf;
std::cout << "substr1 (Tom): " << substr1 << std::endl;
counter++;
}
else if (counter == 2) {
substr2 = buf;
std::cout << "substr2 (and): " << substr2 << std::endl;
counter++;
}
else if (counter == 3) {
substr3 = buf;
std::cout << "substr3 (Jerry): " << substr3 << std::endl;
counter++;
}
谢谢。
【问题讨论】:
-
使用字符串数组而不是 3 个单独的变量会更简单。
-
不要在循环内设置
counter = 1 -
buf 永远不会是“”。这是第一件事。第二件事:只需编写一个函数,它接受一个字符串,返回字符串中的第一个单词,然后返回字符串的其余部分。调用一次,将单词分配给 string1。再一次(使用第一次调用返回的字符串的其余部分),将结果分配给 string2。并且,对于 ol'college try 第三次,将结果放在 string3 中,丢弃其余部分。任务完成!那不是很容易吗?最简单的。在家工作。任务。永远。
-
为什么不直接:
ss >> substr1; ss >> substr2; ss >> substr3;? -
@GeorgeGerganov 哇,这就是这么简单。谢谢你。我不能接受你的帖子,因为你是作为评论回复的。