2

我有一个包含 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() 的代码,结果是一样的。我怎样才能解决这个问题?谢谢。

4

3 回答 3

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));    
}
于 2013-08-25T09:32:21.860 回答
2

你应该使用std::substrand std::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

一个实际工作的例子

于 2013-08-25T09:35:36.910 回答
1

您可以std::substr用作:

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

我建议你使用vector<string>而不是MyArray[200]更多的灵活性。

于 2013-08-25T09:32:10.010 回答