Просто се опитвам да тествам как да разделям думата в C ++, но се сблъсках с много неизвестна грешка. Този проблем наистина ме подлудява, не знам защо се случва.
Това е моят код:
std::string key = "hello world";
std::string word = "";
for (int i = 0; i < (int)key.length(); i++)
{
if (std::isspace(key[i]) || key[i] == " ")
{
std::cout << word << "n";
word.clear();
}
else
word += key[i];
}
Резултатът е само "Здравей", опитах се да открия грешките и да разбера защо думата престава да се съгласува след isspace
състояние? Може ли някой да ми посочи правилната посока?
Благодаря
Редактирано: Опитах следното, а сега липсва буквата d в края?
if (std::isspace(key[i]) || key[i + 1] == " ")
{
Редактиране 2: Решен с това:
if (std::isspace(key[i]) || key[i + 1] == " ")
{
if (key[i + 1] == " ")
word += key[i];
Отговори:
3 за отговор № 1key[j] == 0
никога няма да се случи, дължината на низа не преброява 0, така че последната дума няма да се отпечата.
Премахнете този тест и добавете секунда std::cout << word
след цикъла.
3 за отговор № 2
Защо не работи
Тъй като това условие никога не е изпълнено:
key[i] == " "
защото j
винаги е по-малко от key.length () и (теоретично) от "
От вас променете ключа към:
std::string key = "hello world again";
Ще го видите да се отпечата
hello
world
Но това няма да се отпечата again
.
Гледайки го от C перспектива
C-String (не C ++ std :: string) се прекратява с "
Така че, ако искате да продължите по текущия път и да потърсите "
За да направите това, можете да промените for()
така че j
е <=
да се key.length()
, Но внимавайте C ++ std :: string не е като C-String. Символът в key[key.length()]
не е валиден и нямате достъп до него. Това, което трябва да направите, е да конвертирате C ++ std :: string в C-String с c_str()
.
char tmp = key.c_str()[j];
if (std::isspace(tmp) || tmp == " ")
алтернативно
Можете просто да отпечатате думата след цикъла (ако не е празен)
std::string key = "hello world";
std::string word = "";
for (int j = 0; j < (int)key.length(); j++)
{
if (std::isspace(key[j]) || key[i] == " ")
{
std::cout << word << "n";
word.clear();
}
else
word += key[j];
}
if (!word.empty())
{ std::cout << word << "n";
}