Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2021, 17:44   #1
ApoSa
 
Регистрация: 29.12.2020
Сообщений: 4
Радость Язык Си, (доделать) перевернуть слово

Найти самое длинное слово, перевернуть его и вставить обратно.
Щас программа делает, находит только длинное слово:

Введите текст:
Привет самый большой мир

Самое длинное слово:
большой


Доделать ее, чтобы она, это слово перевернуло и вставило обратно
Введите текст:
Привет самый большой мир

Самое длинное слово:
большой

Переделанный текст:
Привет самый йошьлоб мир

Код:

#include <stdio.h>
#include <string.h>
#include <locale.h>
main() {
	system("chcp 1251"); // Переходим в консоли на русский язык
	setlocale(LC_ALL, "Rus");//Подключение рус.яз.
    char s[100]; // Массив символов 
    int i, id, max, count, len; // Создаем переменные.
    printf("\nВведите текст:\n"); // Выводим сообщение.
	gets(s); // Запись введенного слова в массив "s"
    len = strlen(s);
    max = 0; // Длина самого длинного слова
    id = 0; // Индекс начала самого длинного слова
    count = 0;
    for (i=0; i<len; i++) //Создание цикла подсчета 
        if (s[i] != ' ') count += 1; //Уловие деление строки на подстроки
        else {
            if (count > max) { 
                max = count;
                id = i - count;
            }
            count = 0;
        }
 
    if (count > max) {  // Проверка последнего слова
        max = count;
        id = i - count;
    }
    max += id; // Сложение, совмещённое с присваиванием
    printf("\nСамое длинное слово:\n"); // Выводим сообщение.
    for (i=id; i<max; i++) //Создание цикла подсчета 
		putchar(s[i]); //Вывод символов по индексу
}

Последний раз редактировалось ApoSa; 05.01.2021 в 17:54.
ApoSa вне форума Ответить с цитированием
Старый 05.01.2021, 19:24   #2
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Так?
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* revers(char *text,int len)
{
	for(int i=0;i<len/2;i++)
	{
		char buff=text[i];
		text[i]=text[len-i-1];
		text[len-i-1]=buff;
	}

	return text;
}

void main(void) {
	
	char s[100];
	char *tmp;
	int j = 0;
	int i = 0, id = 0, max = 0, count = 0, len = 0;

	printf("Enter text:\n"); 
	gets(s);
	len = strlen(s);

	
	for (i=0; i<len; i++)
	{
		if (s[i] != ' ') 
		{
			count += 1;
		}
		else 
		{
			if (count > max) 
			{ 
				max = count;
				id = i - count;
			}
			count = 0;
		}
	}
	 
	if (count > max) 
	{ 
		max = count;
		id = i - count;
	}

	max += id;
	printf("Max word:\n");
	
	tmp = (char*)malloc(sizeof(char) * 100);
	for (i=id; i<max; i++) 
	{
		tmp[j] = s[i];
		j++;
		putchar(s[i]);
	}
	tmp[j] = '\0';
	tmp = revers(tmp, j);
	printf("\nInverted max word:\n");
	puts(tmp);
	getchar();
	free(tmp);
}
ichi вне форума Ответить с цитированием
Старый 05.01.2021, 19:48   #3
ApoSa
 
Регистрация: 29.12.2020
Сообщений: 4
По умолчанию

Цитата:
Сообщение от ichi Посмотреть сообщение
Так?
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* revers(char *text,int len)
{
	for(int i=0;i<len/2;i++)
	{
		char buff=text[i];
		text[i]=text[len-i-1];
		text[len-i-1]=buff;
	}

	return text;
}

void main(void) {
	
	char s[100];
	char *tmp;
	int j = 0;
	int i = 0, id = 0, max = 0, count = 0, len = 0;

	printf("Enter text:\n"); 
	gets(s);
	len = strlen(s);

	
	for (i=0; i<len; i++)
	{
		if (s[i] != ' ') 
		{
			count += 1;
		}
		else 
		{
			if (count > max) 
			{ 
				max = count;
				id = i - count;
			}
			count = 0;
		}
	}
	 
	if (count > max) 
	{ 
		max = count;
		id = i - count;
	}

	max += id;
	printf("Max word:\n");
	
	tmp = (char*)malloc(sizeof(char) * 100);
	for (i=id; i<max; i++) 
	{
		tmp[j] = s[i];
		j++;
		putchar(s[i]);
	}
	tmp[j] = '\0';
	tmp = revers(tmp, j);
	printf("\nInverted max word:\n");
	puts(tmp);
	getchar();
	free(tmp);
}
Да, только текст чтобы тоже выводило, с инверсированным словом.
ApoSa вне форума Ответить с цитированием
Старый 06.01.2021, 15:18   #4
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 144
По умолчанию

Цитата:
Сообщение от ApoSa Посмотреть сообщение
Да, только текст чтобы тоже выводило, с инверсированным словом.
Исправил:
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* revers(char *text,int len)
{
        for(int i=0;i<len/2;i++)
        {
                char buff=text[i];
                text[i]=text[len-i-1];
                text[len-i-1]=buff;
        }

        return text;
}

void main() {
       
        char s[100];
        char *tmp;
        int j = 0;
        int i = 0, id = 0, max = 0, count = 0, len = 0;

        printf("\nEnter text:\n");
        fgets(s, 100, stdin);
        len = strlen(s);

        if (s[len-1] == '\n') { s[len-1] = '\0'; }
		len = len - 1;
       
        for (i=0; i<len; i++)
        {
                if (s[i] != ' ')
                {
                        count += 1;
                }
                else
                {
                        if (count > max)
                        {
                                max = count;
                                id = i - count;
                        }
                        count = 0;
                }
        }
         
        if (count > max)
        {
                max = count;
                id = i - count;
        }

        max += id;
        printf("\nMax word:\n");
       
        tmp = (char*)malloc(sizeof(char) * 100);
        for (i=id; i<max; i++)
        {
           
                tmp[j] = s[i];
                j++;
                putchar(s[i]);
        }
        tmp[j] = '\0';
        tmp = revers(tmp, j);
        printf("\nInverted max word:\n");
        fputs(tmp, stdout);
       
        j = 0;
       
        for (i=id; i<max; i++)
        {
            s[i] = tmp[j];
            j++;
        }
       
        printf("\nText with inverted max word:\n");
        fputs(s, stdout);
       
        getchar();
        free(tmp);
}
ichi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевернуть слово при помощи регулярного выражения Regex roma_mcfly C# (си шарп) 4 21.10.2019 21:32
Дана строка,удалить 1-ое слово(Язык Си) Otar4ik Помощь студентам 16 14.09.2014 19:10
перевернуть каждое слово Kraso Помощь студентам 1 17.12.2012 00:31
Перевернуть слово [Паскаль] murotvorez Помощь студентам 7 04.12.2010 15:38
Язык С : Найти наиболее часто встречаемое слово в строке delphi_HOBu4oK Помощь студентам 0 15.05.2010 12:18