将数组字符串转换为char

时间:2014-11-06 18:29:12

标签: c++ arrays

我已从文件中取出所有txt并逐行放入字符串数组中。我试图拆分这个字符串,以便我可以在单独的数组中逐字保存。请告诉我shell如何将字符串数组转换为char。

例如

string line[15];  // line[0] has : was there before
                  // line[1] has : then after

char * pch;
char *c = line.c_str();   // string to char  (i am getting error here. Any body know?)
  pch = strtok (c," ");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ");
  }

错误:C2228:左边的' .c_str'必须有class / struct / union

2 个答案:

答案 0 :(得分:2)

string line[15];是一个字符串数组。所以当你有line.c_str();行时,指向字符串的指针而不是字符串本身。指针没有.c_str()方法,这就是编译器抱怨的原因。 (指针不具备任何方法,因此编译器会告诉您表达式的左侧必须是类/结构/联合类型)。要修复此问题,您需要索引数组以获取字符串。您可以使用以下内容执行此操作:line[0].c_str();

此外,您无法写入c_str()返回的任何内容,因为它返回一个const指针。因此,如果您要对其进行更改,则需要首先从c_str复制结果,然后才能对其进行操作。

另外值得一提的是,有c ++方式进行标记化,你可能会在这里找到一些例子Split a string in C++?。我最后一次这样做,我已经使用了boost,所以我使用了boost::tokenizer库。

答案 1 :(得分:1)

在C ++中有更简单的方法可以实现这一点。 strtok函数是一个C函数,不能直接与std::string一起使用,因为无法获得std::string中基础字符的可写指针访问权限。您可以使用iostream在C ++中直接用文件中的空格分隔单个单词。

不幸的是,标准库缺少一种简单,灵活,高效的方法来在任意字符上拆分字符串。如果你想使用iostream来完成除空格以外的其他东西的拆分,它会变得更复杂。如果您需要更灵活的东西(并且它也可能更有效),使用来自shuttle87的boost::splitboost::tokenizer建议是一个不错的选择。

以下是从标准输入中读取单词的代码示例,您可以使用几乎相同的代码和ifstream来读取文件,或使用stringstream来读取字符串:{{3} }

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

using namespace std;

int main() {
    vector<string> words;
    copy(istream_iterator<string>{cin}, istream_iterator<string>{}, back_inserter(words));
    copy(begin(words), end(words), ostream_iterator<string>{cout, ", "});
    cout << endl;
}