c++ - 为什么 String* 不返回所有字符串?

标签 c++ string pointers c++98

以下代码是我在 C++98 中的项目的一部分,因此我不允许使用 vector 等。现在此函数的主要用途是使用给定的 delimeter 将单个字符串行分解为字符串数组,size 基本上是单词的数量我需要回来。问题是,当我在最后调试和检查 nums 时,它将大小更改为 4,并且只返回第一个单词,由它的每个字符填充。好像,nums 现在是 char* 我已经多次更改代码,但我不知道哪里出错了,有什么建议吗?

string* Split(string ss,char delimeter,int size)
{
    string *nums=new string[size];
    int index_c, index_sw=0;
    for (int i = 0; i < size; i++)
    {
        for(unsigned int j=0;j<ss.length();j++)
        {
            if (ss.at(j) == delimeter)
            {
                index_c = j;
                nums[i] = ss.substr(index_sw, index_c);
                index_sw += index_c;
                i++;
            }
        }
        break;
    }
    return nums;
}

最佳答案

由于事先不知道string ss中的单词数,因此调用Split函数时不能指定size。不知道 size,您将无法将内存分配给 nums

所以你最好使用 stringvector。正如所指出的,vector 在 C++98 中可用。

那么您修改后的 Split 函数将如下所示:

vector<string> Split(string ss, char delimiter)
{
    vector<string> vs;
    int index_c, index_sw=0, j;

    for(j=0;j<ss.length();j++)
    {
        if (ss.at(j) == delimiter)
        {
            index_c = j;
            vs.push_back(ss.substr(index_sw, index_c - index_sw));                
            index_sw = index_c + 1;
        }
    }
    vs.push_back(ss.substr(index_sw, j - index_sw));        
    return vs;
}

然后可以这样调用:

vector<string> ret = Split("This is a stackoverflow answer", ' ');

查看演示 here .

关于c++ - 为什么 String* 不返回所有字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727680/

相关文章:

c++ - 带有 CRTP 的转发构造函数

C++:与每次内联输入验证函数相比,对输入验证函数进行编程对性能有多大影响?

java - 如何使用异常读取除字符串之外的其他内容?

c++ - C丢失指针

c++ - 在 C++ 中,是否允许将函数指针转换为一个函数指针,该函数指针作为参数获取一个指向基类或派生类的指针?

c++ - 在Visual Studio C++中使用Shark机器学习库

c++ - Qt XML 查看器? (像 Notepad++ )

java - java中如何分割这个字符串

javascript - 在 JavaScript 中自动将数字范围转换为数字的 PHP 字符串

swift - 将解析指针设置为 PFUser 以外的类