Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数组字符串转换为字符_C++_Arrays - Fatal编程技术网

C++ 将数组字符串转换为字符

C++ 将数组字符串转换为字符,c++,arrays,C++,Arrays,我已经从文件中获取了所有的txt文件,并将其逐行放入字符串数组中。我正在尝试拆分此字符串,以便在单独的数组中逐字保存。请告诉我如何将字符串数组转换成字符 比如说 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

我已经从文件中获取了所有的txt文件,并将其逐行放入字符串数组中。我正在尝试拆分此字符串,以便在单独的数组中逐字保存。请告诉我如何将字符串数组转换成字符

比如说

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

字符串行[15]是一个字符串数组。所以当你有
line.c_str()行是指向字符串的指针,而不是字符串本身。指针没有
.c_str()
方法,这就是编译器抱怨的原因。(指针没有任何方法,因此编译器会告诉您表达式的左侧必须是class/struct/union类型)。要解决此问题,您需要索引到数组中以获取字符串。您可以使用类似于:
行[0].c_str()的方法来实现这一点

此外,您不能写入由返回的任何内容,因为它返回常量指针。因此,如果要在适当的位置对其进行更改,则需要先复制
c_str
的结果,然后再对其进行操作


也可能提到C++的标记技巧,你可以在这里找到一些例子。上次我这么做的时候,我已经在使用boost了,所以我利用了这个库是一个字符串数组。所以当你有
line.c_str()行是指向字符串的指针,而不是字符串本身。指针没有
.c_str()
方法,这就是编译器抱怨的原因。(指针没有任何方法,因此编译器会告诉您表达式的左侧必须是class/struct/union类型)。要解决此问题,您需要索引到数组中以获取字符串。您可以使用类似于:
行[0].c_str()的方法来实现这一点

此外,您不能写入由返回的任何内容,因为它返回常量指针。因此,如果要在适当的位置对其进行更改,则需要先复制
c_str
的结果,然后再对其进行操作


也可能提到C++的标记技巧,你可以在这里找到一些例子。上次我这么做的时候,我已经在使用boost了,所以我利用了这个库是一个字符串数组。所以当你有
line.c_str()行是指向字符串的指针,而不是字符串本身。指针没有
.c_str()
方法,这就是编译器抱怨的原因。(指针没有任何方法,因此编译器会告诉您表达式的左侧必须是class/struct/union类型)。要解决此问题,您需要索引到数组中以获取字符串。您可以使用类似于:
行[0].c_str()的方法来实现这一点

此外,您不能写入由返回的任何内容,因为它返回常量指针。因此,如果要在适当的位置对其进行更改,则需要先复制
c_str
的结果,然后再对其进行操作


也可能提到C++的标记技巧,你可以在这里找到一些例子。上次我这么做的时候,我已经在使用boost了,所以我利用了这个库是一个字符串数组。所以当你有
line.c_str()行是指向字符串的指针,而不是字符串本身。指针没有
.c_str()
方法,这就是编译器抱怨的原因。(指针没有任何方法,因此编译器会告诉您表达式的左侧必须是class/struct/union类型)。要解决此问题,您需要索引到数组中以获取字符串。您可以使用类似于:
行[0].c_str()的方法来实现这一点

此外,您不能写入由返回的任何内容,因为它返回常量指针。因此,如果要在适当的位置对其进行更改,则需要先复制
c_str
的结果,然后再对其进行操作


也可能提到C++的标记技巧,你可以在这里找到一些例子。上次我做这个的时候,我已经在使用Boost了,所以我使用了这个库。

< P>在C++中有更简单的方法来完成这个任务。
strtok
函数是一个C函数,不能直接与
std::string
一起使用,因为无法获得对
std::string
中底层字符的可写指针访问权。你可以使用<代码> IoSturi s来获取从C++中直接从文件中分离出来的单词。

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

下面是一个从标准输入读取单词的代码示例,您可以使用与
ifstream
几乎相同的代码从文件中读取,或者使用
stringstream
从字符串中读取:

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
向量词;
复制(istream_iterator{cin},istream_iterator{},back_inserter(words));
复制(开始(单词),结束(单词),ostream_迭代器{cout,“,”});

CUT< P>在C++中有更简单的方法来实现这一点。 Strtok> < /C>函数是C函数,不能直接与<>代码> STD::String 使用,因为在<代码> STD::String 中无法获得可写指针访问。Y空间直接从C++中的文件.

不幸的是,标准库缺少一种简单、灵活、高效的方法来拆分任意字符上的字符串。如果您愿意,它会变得更加复杂
#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;
}