话不多说,直接上代码
如果需要根据单一字符分割单词,直接用getline读取就好了,很简单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() { string words; vector<string> results; getline(cin, words); istringstream ss(words); while (!ss.eof()) { string word; getline(ss, word, ',' ); results.push_back(word); } for (auto item : results) { cout << item << " " ; } } |
如果是多种字符分割,比如,。!等等,就需要自己写一个类似于split的函数了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; vector< char > is_any_of(string str) { vector< char > res; for (auto s : str) res.push_back(s); return res; } void split(vector<string>& result, string str, vector< char > delimiters) { result.clear(); auto start = 0; while (start < str.size()) { //根据多个分割符分割 auto itRes = str.find(delimiters[0], start); for ( int i = 1; i < delimiters.size(); ++i) { auto it = str.find(delimiters[i],start); if (it < itRes) itRes = it; } if (itRes == string::npos) { result.push_back(str.substr(start, str.size() - start)); break ; } result.push_back(str.substr(start, itRes - start)); start = itRes; ++start; } } int main() { string words; vector<string> result; getline(cin, words); split(result, words, is_any_of( ", .?!" )); for (auto item : result) { cout << item << ' ' ; } } |
例如:输入hello world!Welcome to my blog,thank you!