在C ++中将字符串分成较小的字符串

时间:2013-08-25 09:23:28

标签: c++ string parsing

我有一个包含1000个字符的字符串。我想将此字符串拆分为每个包含5个字符的字符串数组。代码是:

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 {aka std :: basic_string}'转换为'char *'   参数'1'到'char * strncpy(char *,const char *,size_t)'|

我尝试了没有.c_str()的代码,结果是一样的。 我怎样才能解决这个问题?感谢。

3 个答案:

答案 0 :(得分:4)

当您将char*传递给它时,函数strncpy期望第一个参数为string。编译器会抱怨它无法将std::string转换为char*

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 :(得分: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::vectorarray更灵活。

A working live example

答案 2 :(得分:1)

您可以将std::substr用作:

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

我建议您使用vector<string>代替MyArray[200]以获得更大的灵活性。