char reversevirkne(char virkne[]) {
int apgriests, x = 0;
for (int i = 0; virkne[i] != '\0'; i++) {
x++;
}
x--;
for (int j = x; j >= 0; j--) {
apgriests = (int)virkne[j];
std::cout << virkne[j];
}
std::cout << std::endl;
return 0;
}
Эта программа переворачивает все предложение в обратную сторону. Мне нужно повернуть только слова, чтобы они оставались на своих позициях. пример:
hello world
olleh dlrow
Использование std::vector<std::string>
, std::istringstream
и std::reverse
делает все это программой длиной менее 10 строк или около того. Вопрос к вам: хотите ли вы видеть в этой реализации ответ?
Вопросы «Мне нужен код» часто не получают высокого мнения. Вы пробовали это написать? Вы где-то застряли? У вас есть конкретный вопрос о том, что вы пытаетесь сделать?
apgriests = (int)virkne[j];
имеет несколько проблем. 1) апгристы никогда не используются. 2) следует избегать литья и в этом нет необходимости.
Это действительно несложно:
#include <iostream>
#include <string>
void reversevirkne(const char virkne[]) {
std::string w;
for (int i = 0; virkne[i] != '\0'; ++i) {
if (virkne[i] > ' ') // test also manages \t
w = virkne[i] + w;
else if (!w.empty()) {
std::cout << w << ' ';
w.clear();
}
}
std::cout << w << std::endl;
}
int main(int, char **)
{
reversevirkne("hello world");
return 0;
}
Вы можете попробовать способы сначала преобразовать строку в массив строк (каждая строка представляет собой слово) и перевернуть каждое слово.