0
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
using namespace std;
bool notSpace(char c) {
return !isspace(c);
}
bool isSpace(char c) {
return isspace(c);
}
vector<string> split(const string& s) {
vector<string> words;
string::const_iterator i = s.begin();
while (i != s.end()) {
i = find_if(i, s.end(), notSpace); // " "
if (i != s.end()) {
string::const_iterator j = i;
j = find_if(i, s.end(), isSpace);
words.push_back(string(i, j));
i = j;
}
}
return words;
}
int main() {
string test = "Hello world, I'm a simple guy";
vector<string> words = split(test);
for (vector<string>::size_type i = 0; i < words.size();i++) {
cout << words[i] << endl;
}
return 0;
}
への変換私は、コードをコンパイルするとき、私はこの警告を得る:
パフォーマンス警告、int型からブール
はC4800警告: 'INT': 'BOOLする値を強制的に '真' かをこの関数の戻り値に(パフォーマンス警告)
「偽:
bool isSpace(char c) {
return isspace(c);
}
良い習慣はisspace(c)
から(isspace(c) != 0)
に変更されますか?それとも、ほんとうに不必要なことなのですか?
なぜ機能が必要なのですか? –
コンパイラは、あなたが提案したことを基本的に行っていることを伝えています(int戻り値をboolに変換するため)。だから私の意見では、警告を閉じ込めるコードを追加することもできます。 –
パラメータを 'isSpace'に、' notSpace'を 'char'から' unsigned char'に変更することで、より多くの* *を得ることができます。あなたがアクセント、ウムラウトなどで文字を入力したときに、この方法で完全に壊れた動作を得ることはありません。 –