簡體   English   中英

從字符串中提取單詞 - 微妙的問題

[英]Extracting words from a string - delicate problem

我需要幫助從 C++ 中的字符串中提取單詞。 在我嘗試完成的練習的定義中,單詞是由不是字母或數字的字符(例如,標間符號、空格等)包圍的任何字母和數字序列 例如:

This.Is.a.String 

我的程序應該創建一個字符串向量,其中向量的元素將是提到的字符串中的單個單詞,在本例中為“This”、“Is”、“a”、“String”。

我嘗試使用 for 循環遍歷給定的字符串,並檢查一個條件,即每當我們現在所處的字符是(通過 ASCII 值)A 和 Z(a 和 z)以及數字 0 和 9 之間的任何內容時,將它變成一個字符串。 接下來,將該字符串放入向量中並將字符串的大小調整為 0(這樣我們可以輸入另一個單詞。)這似乎不起作用......

vector<string> Function(string s) {
    char letter;
    string r;
    vector<string> vector_string;
     for(int i=0; i<s.length(); i++) {
        letter=toupper(s.at(i));  // I do this so all letters are capital letters, so it's easier to compare them
        r.resize(0);
   while((letter>=65 || letter<=90) && (letter>=48 || letter<=57)) {

        r.push_back(s.at(i));

    }
        vector_string.push_back(r);




}

 return vector_string;
  }

PS我對C++很陌生。 我知道這不是解決方案,但我必須從某個地方開始。 如果你們中的任何人能幫助我在這里做什么,我將非常感激! 這有點令人沮喪。

感謝並抱歉占用您的時間!

你有一個無限的 while 循環。 而且它的條件不正確。

這里有一個改進:

vector<string> split(string s) {
    char letter;
    vector<string> vector_string;

    for(int i=0; i<s.length(); ) {
        if (isalnum(s[i])) {
            string r; 
            do {  
               r.push_back(s[i++]);
            } while(i<s.length() && isalnum(s[i]));
            vector_string.push_back(r);
        }
        else i++; 
    }
    return vector_string;
}

在線演示

此修訂版使用預先確定的isalnum()在單詞中采用字母數字字符。

為了編寫更清晰的條件,作為一般規則,更喜歡在<cctype>或更好的語言環境對應項中使用標准的字符分類謂詞。

編輯:如果你可以使用正則表達式?

不確定您是否被允許,但代碼如下所示:

vector<string> split(string s) {
    regex word_definition("([a-zA-Z0-9]+)");
    auto words_begin = sregex_iterator(s.begin(), s.end(), word_definition);
    auto words_end = sregex_iterator();

    vector<string> vector_string;
    for(auto i = words_begin; i!=words_end; i++) {
        vector_string.push_back(i->str());
    }
    return vector_string;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM