首页 > 解决方案 > 为什么 String* 不返回所有字符串?

问题描述

以下代码是我在 C++98 中的项目的一部分,因此我不允许使用向量等。现在这个函数的主要用途是使用给定的将单个字符串行分解为字符串数组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;
}

标签: c++stringpointersc++98

解决方案


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

所以你最好使用 a vectorof strings。正如所指出的,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", ' ');

在此处查看演示。


推荐阅读