C++依照字串中的指定字串/字元(例如空白或底線)分割字串的方式如下。
可使用string
類別的substr
搭配find
方法依指定字元來分割字串。
substr
方法可截取字串為子字串,有兩個參數,第一參數為子字串的起始索引位置,第二個參數為子字串的結束索引位置(不含此索引的值)。find
方法有一個參數,為要搜尋的字串位置。
例如下面以空白符號
分割字串hello world
。
main.cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world";
string sub1 = s.substr(0, s.find(" "));
cout << sub1 << endl; // hello
string sub2 = s.substr(s.find(" ") + 1, s.length());
cout << sub2 << endl; // world
return 0;
}
執行印出以下。
hello
world
不過上面方法只能將字串一分為二,若字串中有多個空白則無法依每個空白分割。
main.cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world jenny";
string sub1 = s.substr(0, s.find(" "));
cout << sub1 << endl; // hello
string sub2 = s.substr(s.find(" ") + 1, s.length());
cout << sub2 << endl; // world jenny
return 0;
}
執行印出以下。
hello
world jenny
利用while迴圈分割出多個字並放入vector
中。
main.cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s = "hello world jenny";
vector<string> v;
while (1) {
v.push_back(s.substr(0, s.find(" "))); // 從第一個空白分割出左側子字串放入vector
s = s.substr(s.find(" ") + 1, s.length()); // 從第一個空白分割出右側子字串設為s
// 取得最後一個字。最後一個字找不到空白了
if (s.find(" ") == -1) {
v.push_back(s);
break;
}
}
cout << v.size() << endl; // 3
cout << v[0] << endl; // hello
cout << v[1] << endl; // world
cout << v[2] << endl; // jenny
return 0;
}
執行印出以下。
3
hello
world
jenny
沒有留言:
張貼留言