2013-08-25 62 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