Почему String * не возвращает все строки? - PullRequest
0 голосов
/ 11 декабря 2018

Следующий код является частью моего проекта на 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;
}

1 Ответ

0 голосов
/ 12 декабря 2018

Поскольку вы заранее не знаете количество слов в string ss, вы не можете указать size при вызове функции Split.Не зная size, вы не сможете выделить память для nums.

Так что вам лучше использовать vector из string с.Как указывалось, 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", ' ');

См. Демо здесь .

...