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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2018, 13:59   #1
Breezes
Пользователь
 
Регистрация: 18.10.2018
Сообщений: 14
По умолчанию [C] Дана строка. Записать в обратном порядке буквы первого слова

Доброго всем дня. Собственно, условие задачи в названии темы. Я написал программу, которая переворачивает все слова, но как сделать так, чтобы переворачивалось только первое?
Код
Код:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void main()
{
	char str[80];       
	int i;              //переменная счетчик
	puts("Vvedite stroku\n");       
	gets_s(str);                       //сохраняем в массив строку
	for (i = 0; str[i] != '\0'; i++);    //цикл выводит строку в прямом порядке
	printf("\n%s sodergit %d simvolov \n", str, i);
	for (str[i] = '\0'; i >= 0; i--)     //цикл выводит строку в обратном порядке
		printf("%c\n", str[i]);
	getchar(); getchar();


}
Собственно говоря, я не знаю, как обозначить пробел в строке( он же и отделяет первое слово от последующего).
Breezes вне форума Ответить с цитированием
Старый 21.10.2018, 14:47   #2
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

код пробела 32 или знак одной проверяемой буквы " "
и значит в строке место пробела
будет концом нового цикла
переворачивания 1-го слова
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 21.10.2018 в 14:59.
сфинкс вне форума Ответить с цитированием
Старый 21.10.2018, 14:54   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Breezes Посмотреть сообщение
я не знаю, как обозначить пробел в строке
Код:
' '
p51x вне форума Ответить с цитированием
Старый 21.10.2018, 15:03   #4
Breezes
Пользователь
 
Регистрация: 18.10.2018
Сообщений: 14
По умолчанию

Попробовал следующее:
Код:
if (str[i] = ' ') {
		for (str[i] = '\0'; i >= 0; i--)
			printf("%c\n", str[i]);
	}
Программа не работает.

Последний раз редактировалось Breezes; 21.10.2018 в 15:06.
Breezes вне форума Ответить с цитированием
Старый 21.10.2018, 15:06   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Breezes Посмотреть сообщение
А как мне этот код(32) в программу занести?Я пробовал написать:
Стока и символ это разные вещи.
Код:
' '
p51x вне форума Ответить с цитированием
Старый 21.10.2018, 15:22   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Breezes Посмотреть сообщение
Попробовал следующее
Код:
if (str[i] = ' ') {
Оператор сравнения записывается как ==
Вадим Мошев вне форума Ответить с цитированием
Старый 21.10.2018, 15:42   #7
Breezes
Пользователь
 
Регистрация: 18.10.2018
Сообщений: 14
По умолчанию

Добавил в программу цикл:
Код:
for (i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == ' ')
		{
			for (str[i] = '\0'; i >= 0; i--)     //цикл выводит строку в обратном порядке
			printf("%c", str[i]);
		}
	}
Но проблема:программа выводит только первое перевернутое слово, а остальные он просто не выводит. Что нужно добавить, чтобы выводилось первое перевернутое слово, а затем вся оставшаяся строка?
Breezes вне форума Ответить с цитированием
Старый 21.10.2018, 15:48   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Breezes Посмотреть сообщение
str[i] = '\0'
Не делать этого. И для второго цикла использовать другой индекс.
p51x вне форума Ответить с цитированием
Старый 21.10.2018, 15:57   #9
Breezes
Пользователь
 
Регистрация: 18.10.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не делать этого. И для второго цикла использовать другой индекс.
Немного не понял. Подскажите, как в итоге будет выглядеть, я так и не добился вывода остальной строки
Breezes вне форума Ответить с цитированием
Старый 21.10.2018, 17:02   #10
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
// Слово: начало слова и его длина
#include  <stdio.h>
#include <stdint.h>


// Слово: начало слова и его длина
struct word{
   char* begin;
   size_t len;
};

typedef struct word word;
typedef char bool;

// true если латинский символ
bool is_word_symbol(char c)
{
    return (c>='a' && c<='z') ||
             (c>='A' && c<='Z');
}

word get_first_word(char* str)
{
    // Пропускаем небуквы
    while(!is_word_symbol(*str)) ++str;
    // Считаем буквы
    size_t len = 0;
    while(is_word_symbol(str[len])) ++len;
    // возвращаем слово
    struct word w;
    w.begin = str;
    w.len = len;
    return w;
}

// Поворот слова
void reverse_word_inplace(word w)
{
    char * left = w.begin;
    char * right = w.begin + w.len - 1;
    // Идём с начала в конец и из конца в начало
    while(right>left)
    {
        // Меняем буквы местами
        char tmp = *left;
        *left = *right;
        *right = tmp;
        ++left;
        --right;
    }
}
int main()
{
	char str[80];       
	int i;              //переменная счетчик
	puts("Vvedite stroku\n");       
	gets_s(str,"Error");                       //сохраняем в массив строку
	reverse_word_inplace(get_first_word(str));
        printf("Reversed: %s", str);
}
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 21.10.2018 в 17:55.
New man вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов. Заменить все буквы d, после которых следует запятая, на буквы x (Си) XedCrab Помощь студентам 3 29.01.2014 10:49
Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по алфавиту, то вывести 0; в противном nadyaH Помощь студентам 12 22.11.2013 11:11
Переставить буквы в обратном порядке Julia2707 Помощь студентам 6 10.03.2013 22:07
программка на С++,буквы в обратном порядке iris_ka Помощь студентам 9 02.03.2012 20:03
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47