Задание такого: Перевернуть в обратном порядке первое из слов введенной строки

Я пробовала уже все, но так и не понимаю как написать этот код



 #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;
}

Алгоритм:

  1. Считываем строку до первого пробела в переменную result (Это и есть наше слово)
  2. Переворачиваем его
  3. После продолжаем считывать строку с того места, где остановились
  4. Выводим результат
→ Ссылка
Автор решения: 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;
}
→ Ссылка