0

C++ でのプログラミングに戻りました。私が得るエラー:

送信されたメンバ begin のリクエストは、非クラス タイプの char[30] です

送信されたメンバー end の要求は、非クラス型の char[30] です

char sent[] = "need to break this shiat down";
    for(vector<string>::iterator it=sent.begin(); it!=sent.end(); ++it){
        if(*it == " ")
            cout << "\n";
        else
            cout << *it << endl;
    }

文字を文字列に変更するか、ベクトルを別の方法で定義する必要がありますか?

4

5 に答える 5

3

他の回答で、間違ったタイプを繰り返していることが指摘されています。型であり、使用し、反復するsentように定義する必要があります。または、C++11 をサポートしている場合は、固定サイズの配列を簡単に反復するためのオプションがいくつかあります。と std::end`を使用して繰り返すことができます:std::stringstd::string::begin()std::string::end()std::begin

char sent[] = "need to break this shiat down";
for(char* it = std::begin(sent); it != std::end(sent); ++it){
    if(*it == ' ')
        std::cout << "\n";
    else
        std::cout << *it << "\n";
}

または、範囲ベースのループを使用できます。

char sent[] = "need to break this shiat down";
for (const auto& c : sent)
{
  std::cout << c << "\n";
}
于 2012-11-03T08:24:19.123 に答える
3

ストリーミングを使用して、空白を破棄し、改行を挿入することもできます。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    stringstream ss("need to break this shiat down.", ios_base::in);

    string s;
    while (ss >> s)
        cout << s << endl;

    return EXIT_SUCCESS;
}

結果:

この たわごと

打破する必要があり ます。


于 2012-11-03T08:29:45.643 に答える
2

char sent[]文字列リテラルではありませんstd::stringが、まさにこの場合、それを反復処理できます。

int main() {
char sent[] = "need to break this shiat down";
    for(auto it = std::begin(sent); it!=std::end(sent) - 1; ++it){
        if(*it == ' ')
            cout << "\n";
        else
            cout << *it << endl;
    }
}

" "- に変更し' '、最後のヌル終了文字をスキップしたことに注意してください'\0'...

実際の例: http://liveworkspace.org/code/55f826dfcf1903329c0f6f4e40682a12

C++03 の場合、次のアプローチを使用できます。

int main() {
char sent[] = "need to break this shiat down";
    for(char* it = sent; it!=sent+sizeof(sent) - 1; ++it){
        if(*it == ' ')
            cout << "\n";
        else
            cout << *it << endl;
    }
}

これがその時点で不明なサイズの文字列リテラルである場合は、sizeof の代わりに strlen を使用してください...

于 2012-11-03T08:29:33.377 に答える
1

変数sentのタイプはではありませんがvector<string>char[]です。

ただし、forループは、文字列のベクトルを反復処理しようとします。

プレーン配列の場合は、C反復を使用します。

 int len = strlen(sent);
 for (int i = 0; i < len; i++)
于 2012-11-03T08:16:01.637 に答える
1

stringの代わりに使用char[]

string sent = "need to break this shiat down";
for(string::iterator it=sent.begin(); it!=sent.end(); ++it){
    if(*it == ' ')
        cout << "\n";
    else
        cout << *it << endl;
}

char[]begin メソッドと end メソッドがありません。

于 2012-11-03T08:22:57.580 に答える