[英]convert array string into char
我已經從文件中取出所有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
string line[15];
是一個字符串數組。 所以當你有line.c_str();
line是指向字符串的指針,而不是字符串本身。 指針沒有.c_str()
方法,這就是編譯器抱怨的原因。 (指針沒有任何方法,因此編譯器告訴您表達式的左側必須是類/結構/聯合類型)。 要解決此問題,您需要索引數組以獲取字符串。 您可以使用以下方法執行此操作: line[0].c_str();
另外,您無法寫入c_str()
返回的任何內容,因為它會返回const指針。 因此,如果要更改它,則需要先從c_str
復制結果,然后再對其進行操作。
同樣值得一提的是,還有使用c ++進行標記化的方法,您可能會在這里找到一些示例在C ++中拆分字符串? 。 上一次這樣做時,我已經在使用boost,所以我使用了boost :: tokenizer庫。
有一些更簡單的方法可以在C ++中完成。 strtok
函數是C函數,不能直接與std::string
一起使用,因為無法獲取對std::string
基礎字符的可寫指針訪問。 您可以使用iostream
來直接在C ++中從文件獲取用空格分隔的單個單詞。
不幸的是,標准庫缺乏一種簡單,靈活,有效的方法來將字符串拆分為任意字符。 如果要使用iostream
來完成除空白以外的內容的拆分,它將變得更加復雜。 如果需要更靈活的功能(可能也可能更有效),則使用shuttle87的boost::split
或boost::tokenizer
建議是一個不錯的選擇。
這是一個從標准輸入中讀取單詞的代碼示例,您可以將幾乎相同的代碼與ifstream
一起使用來讀取文件,或者將stringstream
以讀取字符串: http : //ideone.com/fPpU4l
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.