簡體   English   中英

將數組字符串轉換為char

[英]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::splitboost::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM