【问题标题】:Dividing a string to smaller strings in C++在 C++ 中将字符串划分为更小的字符串
【发布时间】:2013-08-27 23:03:47
【问题描述】:

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

【问题讨论】:

  • std::string::substr?
  • @Rapptz 非常感谢。

标签: c++ string parsing


【解决方案1】:

函数strncpy 期望第一个参数是char*,而您将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));    
}

【讨论】:

    【解决方案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 灵活一点。

    working live example

    【讨论】:

      【解决方案3】:

      您可以将std::substr 用作:

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

      我建议您使用 vector&lt;string&gt; 而不是 MyArray[200] 以获得更多灵活性。

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        相关资源
        最近更新 更多