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

Упорядочить строку таким образом, чтобы сначала следовали символы с четными ascii кодами

11.01.2021, 01:29. Показов 1722. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравствуйте, немного застрял на этой программе. Дана строка длинной n (не превышающая 80 символов). Упорядочить строку таким образом, чтобы сначала следовали символы с четными ASCII-кодами. И главный момент: элементы относительно друг друга не должны менять своего расположения. Тоесть, например, если на ввод поступит строка abcd, должно вывести bdac, но выводит bdca. Уже сломал всю голову, но не могу понять как реализовать именно этот тонкий момент. Заранее благодарен любому ответу.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#define N 80
 
int main() {
    setlocale(LC_ALL, "Rus");
    int i, j, n;
    char s[N], per;
    printf("Введите строку: ");
    gets(s);
    n = strlen(s);
    
    puts("Перед обработкой:");
    for (i = 0; s[i] != '\0';i++){
        printf("%c - %d,", s[i], s[i]);
        if (s[i] % 2 == 1)
            puts("нечётный");
        else
            puts("чётный");
    }
    
    for (i = 0; s[i] != '\0'; i++)
        for (j = i + 1; s[j] != '\0'; j++)
            if(s[i] % 2 == 1 && s[j] % 2 == 0){
                per = s[i];
                s[i] = s[j];
                s[j] = per;
            }               
    
    puts("После обработки");
    for (i = 0; s[i] != '\0'; i++){
        printf("%c - %d,", s[i], s[i]);
        if (s[i] % 2 == 1)
            puts("нечётный");
        else
            puts("чётный");
    }
    printf("Вывод строки: ");
    puts(s);
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2021, 01:29
Ответы с готовыми решениями:

Упорядочить строку таким образом, чтобы сначала следовали символы с четными ascii-кодами
Вообщем у меня имеется строка длинной n. Мне нужно упорядочить ее таким образом, чтобы сначала...

Переставить элементы в массиве таким образом, чтобы сначала следовали все отрицательные числа
Дан одномерный массив целых чисел. Переставить элементы в массиве таким образом, чтобы сначала...

Переставить элементы в массиве таким образом, чтобы сначала следовали все отрицательные числа, а затем все остальные
у меня спер программу одногрупник. препод сказал чтобы я ее хоть както исправить . может чтото...

Упорядочить строку таким образом, что бы сначала шли буквы, а потом цифры
Дана строка длиной n. Упорядочить ее таким образом, что бы сначала шли буквы, а потом цифры. На СИ

2
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
11.01.2021, 16:18 2
Лучший ответ Сообщение было отмечено kwokka как решение

Решение

Потому что, у вас происходит простой обмен значений в ячейках, как при сортировке выбором. А вам нужно делать сортировкой вставками.
Изображения
 
1
0 / 0 / 0
Регистрация: 11.01.2021
Сообщений: 8
13.01.2021, 12:18  [ТС] 3
Спасибо большое! Решение:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#define N 80
int main() {
    setlocale(LC_ALL, "Rus");
    int i, j;
    char s[N], per;
    printf("Введите строку: ");
    gets(s);
    
    puts("Перед обработкой:");
    for (i = 0; s[i] != '\0';i++){
        printf("%c - %d,", s[i], s[i]);
        if (s[i] % 2 == 1)
            puts("нечётный");
        else
            puts("чётный");
    }
    
    for (i = 1; s[i] != '\0'; i++) { 
        per = s[i];    
        j = i - 1;
        while(j >= 0 && s[j] % 2 == 1 && per % 2 ==0){
            s[j + 1] = s[j];
            j = j - 1;
        }
        s[j + 1] = per;
    }
    
    puts("После обработки");
    for (i = 0; s[i] != '\0'; i++){
        printf("%c - %d,", s[i], s[i]);
        if (s[i] % 2 == 1)
            puts("нечётный");
        else
            puts("чётный");
    }
    printf("Вывод строки: ");
    puts(s);
    return 0;
}
0
13.01.2021, 12:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2021, 12:18
Помогаю со студенческими работами здесь

Переставить строки матрицы таким образом, чтобы минимальные элементы строк следовали в порядке убывания
В матрице размера 7 × 5 переставить строки таким образом, чтобы минимальные элементы строк...

Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2.
Вот задание: Даны строки S1 и S2. Сформировать строку S таким образом, чтобы в нее попеременно...

Отредактировать текст таким образом, чтобы все знаки препинания располагались в начале, за ним следовали цифры
Дано некоторый текст. Отредактировать его таким образом, чтобы все знаки препинания располагались в...

Изменить строку таким образом, чтобы все различные символы остались по одному разу
Изменить строку таким образом, чтобы все различные символы остались по одному разу, причем остаются...

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

Преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются...


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

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

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