2013-08-25 98 views
2

我有一個包含1000個字符的字符串。我想將這個字符串拆分爲每個5個字符的字符串數組。該代碼是:在C++中將字符串劃分爲更小的字符串

int main() 
{ 

    string myarray[200]; 
    int k = 0; 
    string num = "a string with 1000 characters"; 

    while(!num.empty()) 
    { 
     strncpy(myarray[k],num.c_str(),5); 
     num.erase(0,5); 
     k++; 

    } 

} 

該代碼給出了這樣的錯誤:

不能轉換 '的std :: string {又名性病:: basic_string的}' 到 '字符*' 爲了論證 '1' 'char * strncpy(char *,const char *,size_t)'|

我試過沒有.c_str()的代碼,結果是一樣的。 我該如何解決這個問題?謝謝。

+4

'std :: string :: substr'? – Rapptz

+0

@Rapptz非常感謝。 – jason

回答

4

功能strncpy期望第一個參數是char*而您通過string它。編譯器會抱怨它不能轉換std::stringchar*

char *strncpy(char *dest, const char *src, std::size_t count); 

更好地利用std::vector,並呼籲std::string::substr

#include <string> 
#include <vector> 

std::string num("a string with 1000 characters"); 

std::vector<std::string> myarray; 
myarray.reserve(200); 

for (int i=0; i<num.size(); i+=5) 
{ 
    myarray.push_back(num.substr(i, 5));  
} 
1

您可以使用std::substr爲:

string MyArray[200]; 
for int i = 0;i<1000;i+=5) 
{ 
    MyArray[i] = num.substr(i,5); 
} 

,我會建議你使用vector<string>而不是MyArray[200]了一點更大的靈活性。

2

您應該使用std::substrstd::vector

#include <string> 
#include <vector> 

std::string num = "a string with 1000 characters"; 
std::vector<std::string> myArray; 

for (unsigned int i = 0; i < num.length(); i += 5) 
{ 
    myArray.push_back(num.substr(i, 5)); 
} 

std::vector是比array更靈活一些。

A working live example