Задание такого: Перевернуть в обратном порядке первое из слов введенной строки
Я пробовала уже все, но так и не понимаю как написать этот код
#include<stdio.h>
#include<string>
#pragma warning(disable : 4996)
using namespace std;
int main()
{
char str[50] = "Hello word";
int index,i;
printf("The given string is =%s\n", str);
while (str[i] != ' ')
i++;
index = i;
printf("After reversing string is =%s", strrev(str));
return 0;
}
Ответы (3 шт):
Автор решения: Leo_lisik
→ Ссылка
Я уже подзабыл c++ и код не оптимальный, но рабочий
#include<stdio.h>
#include<iostream>
#pragma warning(disable : 4996)
using namespace std;
int main()
{
char str[50] = "Hello word";
int index = 0;
printf("The given string is =%s\n", str);
char result[50] = "";
for (int i = 0; str[i] != ' '; i++) {
result[i] = str[i];
index = i;
}
strrev(result);
for (int i = index + 1; str[i] != '\0'; i++) {
result[i] += str[i];
}
cout << "Result: " << result;
return 0;
}
Алгоритм:
- Считываем строку до первого пробела в переменную result (Это и есть наше слово)
- Переворачиваем его
- После продолжаем считывать строку с того места, где остановились
- Выводим результат
Автор решения: nyekitka
→ Ссылка
Ну, во-первых, нужно инициализировать переменную i, прежде чем её использовать. Во-вторых, мне кажется, гораздо лучше будет использовать средства std::string и библиотеки algorithm, а не пользоваться С-шными методами:
#include <string>
#include <iostream>
#include <algorithm>
#pragma warning(disable : 4996)
using namespace std;
int main() {
string s;
getline(cin, s); //считываем строчку с консоли
cout << "Given string is " << s << '\n';
int index = s.find(' '); //находим первое вхождение пробела
auto it = s.begin() + index; //получаем итератор, который указывает на первый пробел
if (index == -1) it = s.end(); //если пробела нет, то значит слово одно, поэтому берём конец строчки
reverse(s.begin(), it); //делаем ревёрс строчки от начала до первого пробела
cout << "After reversing string is " << s;
return 0;
}
Автор решения: avp
→ Ссылка
Начало слова удобно находить, используя функцию strspn, которая пропустит начальные разделители в строке, а его длину, вызвав функцию strcspn, которая пропустит все символы, не являющиеся разделителями (т.е. символы, составляющие слово).
Тогда получим, например:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int
main (int ac, char *av[])
{
char str[1024];
#define DELIMS " \t\n\r"
while (fgets(str, 1024, stdin)) {
size_t wbeg = strspn(str, DELIMS), // beginning of the first word
wlen = strcspn(str + wbeg, DELIMS); // word length
// reverse the word
for (size_t i = wbeg, j = wbeg + wlen - 1; i < j; i++, j--) {
char t = str[i];
str[i] = str[j];
str[j] = t;
}
fputs(str, stdout);
}
return puts("End") == EOF;
}