#c #string #delimiter
#c #строка #разделитель
Вопрос:
Я разбиваю an std::string
на слова и добавляю каждое в двусвязный список. Я написал append_word
метод для добавления в список, который, как я проверил, не является проблемой (добавление слов по отдельности с помощью этого метода отлично подходит). Моя функция заключается в следующем:
int set_text(std::string text) {
u_int i, word_start, word_end;
i = word_start = word_end = 0;
while (i <= text.length()) {
if (text[i] == ' ' || text[i] == '') {
word_end = i;
std::string substr = text.substr(word_start, word_end);
// empty string argument to append_word has no effect
if (append_word("", substr) < 0)
return -1;
i = word_start = word_end;
} else {
i
}
}
return 0;
}
Однако вызов этого в «Lorem ipsum dolor» приводит к первому слову «Lorem» и второму слову «ipsum dolor» перед третьим словом «dolor». Почему второй пробел рассматривается только как разделитель в третьем слове, но не во втором?
Комментарии:
1. Вы были бы открыты для использования
std::ostringstream
для разделения или хотите сохранить подход этой функции?2. en.cppreference.com/w/cpp/string/basic_string/substr принимает аргументы
pos
иnpos
, т. е. начальную позицию и длину подстроки. Он не занимает начальную позицию и конечную позицию. Вы рассматриваете это как последнее.3. И когда вы использовали свой отладчик для запуска этого кода, по одной строке за раз, какие наблюдения вы сделали? Для этого и нужен отладчик, так разве вам не имеет смысла потратить несколько минут на изучение того, как его использовать, чтобы вы могли легко увидеть, что именно делает ваша программа, чтобы вы могли исправить это самостоятельно, а не просить других о помощи?
4. Это должно быть закрыто как опечатка? Или есть лучшая категория?
5. @JohnFilleau Я должен прочитать документацию. Спасибо