0

char 配列内の単語数をカウントするアルゴリズムに取り組んでいます。これまでのところ、本来の方法で機能していないようです。文字がリーチで空白でない場合、それは単語の一部と見なされるべきです。空白に到達すると、私たちはもはや一言ではありません。たとえば、「hello」と「world」の間にスペースがあるため、「Hello World」は 2 つの単語になります。

コード:

for(int l = 0; l < count; l++){
        if(isalpha(letters[l]) && !in_word){
            num_words++;
            in_word = true;     
        }else{
            in_word = false;
        }
    }

入力例: aaaaa bbb aaa lla bub www

出力例: 13 ワード

望ましい出力: 6 ワード

可能な答え:

for(int l = 0; l < count; l++){
        if(isalpha(letters[l]) && !in_word){
            num_words++;
            in_word = true;     
        }else if(!isalpha(letters[l])){
            in_word = false;
        }
    }
4

3 に答える 3

0

改行、スペース句読点などを適切に処理したい場合は、正規表現を使用できます。utf-8 文字列でも正しく動作するようにこれを適応させることさえできるかもしれません。ただし、C++11 のサポートが必要です。

#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(\w*)\\b")

  int count = 0;
  while (std::regex_search (s,m,e)) {
    ++count;
    s = m.suffix().str();
  }

  std::cout<<"Number of matches = "<<count<<std::endl;

  return 0;
}
于 2013-11-06T04:00:53.950 に答える