Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
pokemon3108
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
1

Поменять местами слова в строке

04.11.2018, 19:48. Просмотров 524. Ответов 5
Метки нет (Все метки)

Как поменять местами слова в строке?
Пусть было aaa bb ccc ddddd qqqq
Надо чтоб было aaa ddddd ccc bb qqqq
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2018, 19:48
Ответы с готовыми решениями:

Поменять местами слова в строке
В каждой строке текста поменять местами самое длинное и самое короткое слово. Максимум находит...

Как поменять в строке слова местами
Необходимо в строке поменять местами самое длинное и самое короткое слово, подскажите, пожалуйста,...

Предпоследнее и последнее слова в строке поменять местами
Добрый день. Помогите пожалуйста с заданием: Ввести символьную строку. Предпоследнее и последнее...

В строке, содержащей не менее двух слов, разделенных пробелом, поменять местами первое и последнее слова
Доброго времени суток! Кто может реализовать данное задание в Си? Строка – это правильное...

Перевернуть слова и поменять местами
2. Написать программу, которая сначала переворачивает слова (разделенные пробелами) в веденной...

5
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10510 / 6215 / 1562
Регистрация: 25.07.2009
Сообщений: 11,834
04.11.2018, 22:05 2
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
29
30
#include <stdio.h>
#include <string.h>
 
#define MAX_WORDS (256)
#define DELIM " ,.!?\t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        char * words[MAX_WORDS], * ptr;
        int i, j, found = 0;
        
        for ( ptr = strtok(buf, DELIM); ptr && found < MAX_WORDS; ptr = strtok(NULL, DELIM) )
            words[found++] = ptr;
        
        for ( i = 1, j = found - 2; i < j; ++i, --j ) {
            char * tmp = words[i];
            words[i] = words[j];
            words[j] = tmp;
        }
        
        printf("Result: ");
        for ( i = 0; i < found; ++i )
            printf("%s ", words[i]);
        printf("\n\n");
    }
    
    return 0;
}
Код
[andrew@easybook string]$ gcc -Wall swap_words.c 
[andrew@easybook string]$ ./a.out 
String: aaa bb ccc ddddd qqqq
Result: aaa ddddd ccc bb qqqq 

String: 
[andrew@easybook string]$
0
pokemon3108
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
05.11.2018, 00:09  [ТС] 3
Можно как-нибудь без использования доп.массивов?
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10510 / 6215 / 1562
Регистрация: 25.07.2009
Сообщений: 11,834
05.11.2018, 02:57 4
Цитата Сообщение от pokemon3108 Посмотреть сообщение
Можно как-нибудь без использования доп.массивов?
Можно как-нибудь с использованием доп. стека
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
 
struct NODE {
    char * word;
    struct NODE * next;
};
 
struct NODE * push(struct NODE * stack, char * word) {
    struct NODE * node = malloc(sizeof(struct NODE));
    assert(node);
    
    node->next = stack;
    node->word = word;
    
    return node;
}
 
struct NODE * pop(struct NODE * stack, char ** word) {
    if ( ! stack )
        return NULL;
    else {
        struct NODE * next = stack->next;
        *word = stack->word;
        
        free(stack);
        return next;
    }
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        char * first, * last, * word;
        struct NODE * stack = NULL;
        
        if ( ! ( first = strtok(buf, DELIM) ) ) {
            printf("Empty string!\n\n");
            continue;
        }
        
        while ( ( word = strtok(NULL, DELIM) ) != NULL )
            stack = push(stack, word);
        
        if ( ! stack ) {
            printf("Only one word: %s\n\n", first);
            continue;
        }
        
        stack = pop(stack, &last);
        
        printf("Result: %s ", first);
        while ( stack ) {
            stack = pop(stack, &word);
            printf("%s ", word);
        }
        printf("%s\n\n", last);
    }
    
    return 0;
}
0
pokemon3108
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 16
05.11.2018, 08:17  [ТС] 5
Хм..а как сделать без все этого? Как сдвигать слова, если они разной длины?
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10510 / 6215 / 1562
Регистрация: 25.07.2009
Сообщений: 11,834
05.11.2018, 13:17 6
Для начала посчитать сколько всего слов в строке. Потом предпоследнее переместить после первого. Второе (теперь уже третье) переместить перед последним. Третее с конца после второго. Третье с начала (теперь уже четвёртое) перед предпоследним... И главное - ничего не перепутать!
0
05.11.2018, 13:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2018, 13:17

Поменять местами первую и последнюю буквы слова
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латински букв; между...

Поменять местами первую и последнюю букву слова
Поменять местами первую и последнюю букву слова #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Поменять местами четные и нечетные, по порядку слова
Здравствуйте. Обрисую ситуацию: есть задание &quot;Ввести с клавиатуры предложение. Поменять местами...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru