1

word私はすでに同様の質問を見ましたが、私の答えはありません: 以下のコードでは、配列オブジェクトを返すことができるように char 配列に格納したいと考えています。どこに問題があるのか​​教えてください??

int main(int, char**)
{
    string text = "token test string";
    char *word;
    char *str;
    int i=0,j=0;
    word = strtok(& text[0], " ");

    while(word!=NULL)
    {
        cout << word << " : " << text.length() << endl;
        word = strtok(NULL, " ");
        str[j]=word; // Here Error
        j++;
    }
}
4

5 に答える 5

4

あなたの人生をもう少し健全に保ち、意図したとおりに C++ を使用するようにしてください。おそらくこの順序で何か:

std::istringstream text("token test string");

// initialize vector of strings from input:
std::vector<std::string> str((std::istream_iterator<std::string>(text),
                              std::istream_iterator<std::string>());

// display each word on a line, followed by its length:
for (auto const & s : str) 
   std::cout << s << " : " << s.length() << "\n";
于 2013-09-10T04:45:52.283 に答える
1

コンパイラーが言うように、char へのポインターを char に影響を与えます。

 char* word;

str[j] は char の参照です ( string クラスの operator [] )

あなたは書くべきです

  str[j] = *word;
于 2013-09-10T04:40:20.777 に答える
1
string text = "token test string";
char *word = nullptr; // good to initialize all variables
char *str = nullptr;
int i=0,j=0;
word = strtok(& text[0], " ");  // <-- this is not correct(1)

while(word!=NULL)
{
    cout << word << " : " << text.length() << endl;
    word = strtok(NULL, " ");
    str[j]=word; // Here Error
    j++;
}

(1) strtok() ランタイム関数は、入力として std::string を使用せず、char[] 配列を使用します - 実際、パラメーターを変更します。std::string をトークン化する代わりに、別のアプローチを使用する必要があります (これはより C++sh です)。

例えば

istringstream iss(text);
vector<string> tokens;
copy(istream_iterator<string>(iss),
     istream_iterator<string>(),
     back_inserter<vector<string> >(tokens));

これで、ベクトル「トークン」にすべての単語が含まれるようになりました

代替。テキストを配列として宣言する

char text[] = "token test string";

word = strtok(text, " ");  // <-- this is not correct(1)

while(word!=NULL)
{
  cout << word << " : " << strlen(text) << endl;
  if ( (word = strtok(NULL, " ")) != NULL )
  {
    str[j++] = strdup(word);  // make a copy allocated on heap
  }
}
于 2013-09-10T05:55:54.183 に答える
0

str[j]そしてword同じタイプではない

str[j]は char であり、wordへのポインタcharまたは配列です。char

于 2013-09-10T04:41:51.737 に答える