Работа со строками в Си, вставить "hello" после первого слова

Он просто тут скрыт :slight_smile:


Автору вроде бы с С строками надо было.

Если чесно, я так и не понял плюсы нужны или нет.

Похоже я все-таки додумался,еле еле, но додумался, благодаря вам, конечно же, целую вас)
Как по вашему все выглядит, нормально?

#include <iostream>
#include <string> 
using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");
    char s[100], str[100], str1[100];
    char s1[] = " hello";
    cout << "Введите строку:";
    gets_s(s);
    strcpy_s(str, s);
    for (int i = 0; i <= strlen(str); i++)
        if (str[i] == ' ')
        {
            strncpy_s(str1, str, i);          
            strcat_s(str1, s1);
            strcat_s(str1, s+i);
            break;
        }
    strcpy_s(s, str1);
    puts(s);
    system("pause");
}

Это лишнее, можно s и использовать.

И это тоже, можно сразу str1 вывести.

Лучше всегда ставить { } в циклах/if, даже если там одна инструкция внутри, а то вызывает дискомфорт, ну и ошибиться проще при дописывании кода.

И

Сейчас упадет с ошибкой если ввести одно слово.

Как вариант простого исправления, можно добавить пробел в конец :kolobokbatya:

#include <cstdio> // gets, puts, printf
#include <cstring> // strcat, ...
#include <windows.h> // system("pause")
#include <clocale> // setlocale

int main()
{
    setlocale(LC_ALL, "");
    
    char input[100] = { 0 }, result[100] = { 0 };
    printf("Введите строку: ");
    gets_s(input);

    strcat_s(input, " ");

    for (int i = 0; i < strlen(input); i++)
    {
        if (input[i] == ' ')
        {
            strncpy_s(result, input, i + 1);
            strcat_s(result, "hello");
            strcat_s(result, input + i);
            break;
        }
    }

    puts(result);

    system("pause");
}

Или искать не только пробел, но и конец строки (i == strlen(input) - 1), но тогда наверно еще что-то поменять нужно для обработки этого случая.