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