/ / объркващо, когато concat низ в c ++ - c ++, string

объркващо, когато concat низ в c ++ - c ++, низ

Просто се опитвам да тествам как да разделям думата в 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 за отговор № 1

key[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";
}