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 的引用(字符串类的 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));

现在你得到了向量“tokens”中的所有单词

alt。将文本声明为数组

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]是一个字符,并且word是一个指针char或一个数组char

于 2013-09-10T04:41:51.737 回答
-1

str[j]是一个char

word是一个char*

试试这段代码...但请记住,在我的示例中您只能存储 10 个单词...我建议您使用更动态的东西,例如std::vector<std::string>,来存储您的令牌。

int main(int, char**)
{
    string text = "token test string";
    char *word;
    char *str[10];    // HERE is the change! you can have up to 10 words!
    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++;
    }
}
于 2013-09-10T04:49:21.633 回答