关于c ++:从拆分字符串定义变量?


Defining variables from split strings?

所以,我编写了这段代码,它基本上将用户输入拆分成不同的字符串。

例如

1
Workspace.Hello.Hey would then be printed out as"Workspace""Hello""Hey"

但是,我需要知道如何将这些变量定义为它们各自独立的变量,稍后可以调用这些变量。这就是我的密码。

1
2
3
4
5
6
7
8
9
std::string str;
    std::cin >> str;
    std::size_t pos = 0, tmp;
    while ((tmp = str.find('.', pos)) != std::string::npos) {
        str[tmp] = '\0';
        std::cout <<"Getting" << str.substr(pos) <<" then";
        pos = tmp;
    }
    std::cout <<"Getting" << str.substr(pos) <<" then";


C++有一个向量对象,你可以将它们存储在连续的索引中,并根据需要访问它们。

再想一想你在做什么,你可以更容易地将字符串输入到一个Stringstream,set中。作为分隔符,然后像上面一样将内容读取到字符串的向量中。


将子字符串放入向量中。下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::string str;
std::cin >> str;
std::size_t pos = 0, tmp;
std::vector<std::string> values;
while ((tmp = str.find('.', pos)) != std::string::npos) {
    values.push_back(str.substr(pos, tmp - pos));
    pos = tmp + 1;
}
values.push_back(str.substr(pos, std::string::npos));

for (pos = 0; pos < values.length(); ++pos)
{
    std::cout <<"String part" << pos <<" is" << values[pos] << std::endl;
}


您可以使用boost标记化和拆分字符串。这种方法还有一个额外的好处,即允许您在多个熟食店中拆分。(见下文):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;

int main() {
    string text ="Workspace.Hello.Hey";

    vector<string> parts;
    split(parts, text, is_any_of("."));

    for(auto &part : parts) {
        cout << part <<"";
    }
    cout << endl;

    return 0;
}