網頁

2022/7/13

C++ 簡單空白分割字串

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


沒有留言:

張貼留言