2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
1

Вывод слова наоборот

18.09.2017, 13:27. Показов 3565. Ответов 7
Метки нет (Все метки)

задача следующая: надо спросить слово с пользователя и вывести его на экран наоборот. когда использую такой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[40];
    printf("enter word\n");
    scanf("%s", str);
    for (size_t i = strlen(str); i >= 0; i--) {
        printf("%c", str[i]);
    }
    printf("\n");
    return 0;
}
то на выходе получаю десять строк разнообразных символов.
когда использую такой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[40];
    printf("enter word\n");
    scanf("%s", str);
    for (size_t i = strlen(str); i > 0; i--) {
        printf("%c", str[i]);
    }
    printf("\n");
    return 0;
}
то получаю все кроме первого символа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2017, 13:27
Ответы с готовыми решениями:

Переставить слова в тексте наоборот
И так у нас есть текст из 60 букв, нужно переставить в нем все слова наоборот. Как реализовать...

Вывод числа наоборот
Вот так будет выглядеть на паскале программа по выводу числа наоборот. Ну то есть вводим 123 а...

Отсортировать слова в заданном тексте по алфавиту или наоборот
Дан текст. Сортировать слова в тексте по алфавиту или наоборот (по желанию пользователя)

Вывод числа прописью и наоборот, вывод слова числом
Вечер добрый. Есть программа, которая выводит число прописью до 99.999.999. Как сделать, чтобы она...

7
0 / 1 / 0
Регистрация: 12.09.2017
Сообщений: 5
18.09.2017, 14:53 2
проблема в том что он вот тут for (size_t i = strlen(str); i > 0; i--) сразу уменьшает на 1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[40];
    printf("enter word\n");
    scanf("%s", str);
    for (size_t i = strlen(str); i > 0; i--) {
        printf("%c", str[i-1]);
    }
    printf("\n");
    return 0;
}
Добавлено через 15 минут
тоесть массив начинается с 0 а у тебя с 1.

Добавлено через 54 минуты
а в первом надо на int переменную i заменить

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[40];
    printf("enter word\n");
    scanf("%s", str);
    for (int i = strlen(str); i >= 0; i--) {
        printf("%c", str[i]);
    }
    printf("\n");
    return 0;
}
1
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
18.09.2017, 17:48 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
void rev(void)
{
    int ch = getchar();
    if (ch != EOF && !isspace(ch))
    {
        rev();
        putchar(ch);
    }
}
 
int main(void)
{
    rev();
    return 0;
}
1
Велосипедист...
352 / 219 / 73
Регистрация: 15.12.2015
Сообщений: 785
19.09.2017, 03:12 4
Цитата Сообщение от zeivar Посмотреть сообщение
а в первом надо на int переменную i заменить
Почему?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
 
int main( void )
{
    char str[ 20 ];
    
    puts( "Enter a word:" );
    scanf( "%19s", str );
    
    
    {
        char inverted_str[ 20 ];
        size_t i = strlen( str ),
               j = 0;
 
        while ( i > 0 )
            inverted_str[ j++ ] = str[ --i ];
        inverted_str[ j ] = '\0';
 
        puts( inverted_str );
    }
}
1
93 / 77 / 31
Регистрация: 29.08.2017
Сообщений: 188
19.09.2017, 04:36 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char buf[20];
    scanf("%19s", buf);
    for (size_t i = 0, j = strlen(buf) - 1; i < j; ++i, --j)
    {
        char ch = buf[i];
        buf[i] = buf[j];
        buf[j] = ch;
    }
    puts(buf);
    return 0;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
 
struct stack
{
    int ch;
    struct stack* prev;
};
 
int main(void)
{
    struct stack* top = NULL;
    int ch;
    while ((ch = getchar()) != EOF)
    {
        struct stack* next = (struct stack*)malloc(sizeof(struct stack));
        next->ch = ch;
        next->prev = top;
        top = next;
    }
    while (top != NULL)
    {
        putchar(top->ch);
        struct stack* prev = top->prev;
        free(top);
        top = prev;
    }
    return 0;
}
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
19.09.2017, 13:11 6
kemozn, строку 8 перепишите так:
C
1
for (int i = strlen(str) - 1; i >= 0; i--) {
2
2 / 2 / 0
Регистрация: 08.09.2017
Сообщений: 9
20.09.2017, 04:56  [ТС] 7
LazySlacker, Captain Maxee, zeivar, спасибо. а какой из всех вариантов самый быстрый?
0
Велосипедист...
352 / 219 / 73
Регистрация: 15.12.2015
Сообщений: 785
20.09.2017, 06:39 8
kemozn, я думаю, об этом рано думать) Оставьте вопросы оптимизации на потом.
Разберите все предоставленные варианте, и выберете тот, который Вам больше всего по душе.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2017, 06:39
Помогаю со студенческими работами здесь

Слова наоборот
Задача из ветки C#: В записке слова зашифрованы – каждое из них написано наоборот. Написать...

Слова наоборот
Дан текст, состоящий из слов, знаков препинания и других символов. Словом в тексте считается...

вывести слова из файлы наоборот
на диске заранее создан файл, в нем записан некоторый текст, необходимо вывести слова текста в...

Перевести слова в строке наоборот
Ребята, помогите новичку!!! есть несколько заданий, не могу разобраться 1. нужно перевести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru