我有一个包含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()的代码,结果是一样的。 我怎样才能解决这个问题?感谢。
答案 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::substr
和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
更灵活。
答案 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]
以获得更大的灵活性。