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

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

16.01.2017, 21:24. Просмотров 327. Ответов 13
Метки нет (Все метки)

Вообщем у меня имеется строка длинной n. Мне нужно упорядочить ее таким образом, чтобы сначала следовали символы с честными ascll- кодами. Как мне вот эти самые коды то брать. Если не можете код написать, то хоть подскажите с алгоритмом действий.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2017, 21:24
Ответы с готовыми решениями:

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

Выведите все символы ASCII с кодами от 33 до 126 и их коды
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char i,n; for...

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

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

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

13
nimazzzy
Заблокирован
16.01.2017, 21:38 2
Цитата Сообщение от kolyasik583 Посмотреть сообщение
Как мне вот эти самые коды то брать.
Никак не надо брать. Сам символ - это и есть код. Просто работай с char, как с числом.
0
CoderHuligan
773 / 554 / 203
Регистрация: 30.06.2015
Сообщений: 3,138
Записей в блоге: 17
17.01.2017, 12:22 3
Цитата Сообщение от nimazzzy Посмотреть сообщение
Просто работай с char, как с числом.
Если строка в латиннице
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
17.01.2017, 12:36 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    char str[] = "apple", *p1, *p2, tmp;
    for (p1 = str; *p1; ++p1)
        for (p2 = p1 + 1; *p2; ++p2)
            if (*p1 & 1 && !(*p2 & 1))
            {
                tmp = *p1;
                *p1 = *p2;
                *p2 = tmp;
            }
    printf("%s\n", str);
    return 0;
}
0
17.01.2017, 12:36
nimazzzy
Заблокирован
17.01.2017, 13:06 5
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Если строка в латиннице
Не обязательно. От кодировки текста зависит.
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
17.01.2017, 13:39 6
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Если строка в латиннице
Да нам без разницы что в тексте, нужны лишь коды символов ASCII.
0
kolyasik583
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 33
18.01.2017, 14:15  [ТС] 7
А как то сделать без использования указателей?
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
18.01.2017, 15:01 8
Цитата Сообщение от kolyasik583 Посмотреть сообщение
А как то сделать без использования указателей?
Указатели - основа Си.
Если хотите отсрочить знакомство с ними - используйте функцию strlen и работайте с str как с массивом. Это как сортировка пузырьком, только со сравнением не значения, а чётности ASCII кодов соседних элементов.
0
kolyasik583
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 33
18.01.2017, 15:05  [ТС] 9
Вот я попытался сделать, но не работает, выдает какаю-то фигню, не пойму где ошибка.

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
#include<stdio.h>
#include<conio.h>
#include<string.h>
# define N 80
    int main ()
    {
    int i,k, j;
    char s1[N];
    char s2[N];
    char s3[N];
 
    clrscr();
    printf("vvedite stroky:");
    scanf("%s",&s1);
    i=0;
    k=0;
    j=0;
    for (i;i<=N;i++)
    {
      if(s1[i]%2==0)
      {
      s2[j]=s1[i];
      j=j+1;
      }
      else
      {
      s3[k]=s1[i];
      k=k+1;
      }
      }
      strcat(s1,s2);
    printf("%s",s3);
    getch();
    return 0;
    }
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
18.01.2017, 15:11 10
Используйте теги оформления кода.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char str[] = "apple", tmp;
    int i, j, len = strlen(str);
    for (i = 0; i < len; i++)
        for (j = len - 1; j > i; j--)
            if (str[i] & 1 && !(str[j] & 1))
            {
                tmp = str[i];
                str[i] = str[j];
                str[j] = tmp;
            }
    printf("%s\n", str);
    return 0;
}
0
kolyasik583
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 33
18.01.2017, 15:58  [ТС] 11
Вот ваш же код, переделанный под произвольно вводимую строку. Но он работает неправильно. В чем ошибка?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(void)
 
#include <stdio.h>
#include <string.h>
{
    char str[] = "apple", tmp;
    int i, j, len = strlen(str);
    for (i = 0; i < len; i++)
        for (j = len - 1; j > i; j--)
            if (str[i] & 1 && !(str[j] & 1))
            {
                tmp = str[i];
                str[i] = str[j];
                str[j] = tmp;
            }
    printf("%s\n", str);
    return 0;
}
Добавлено через 20 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Не то скинул. Вот ваш код переделанный под любую вводимую строку. Но он работает неправильно. В чем ошибка?
#include <stdio.h>
#include <string.h>
 #define N 80
int main(void)
{
    char str[N] , tmp;
    int i,n, j, len = strlen(str);
    printf("vvedite stroky dlinnoy n: ");
    scanf("%s",&str);
    
    for (i = 0; i < len; i++)
        for (j = len - 1; j > i; j--)
            if (str[i] & 1 && !(str[j] & 1))
            {
                tmp = str[i];
                str[i] = str[j];
                str[j] = tmp;
            }
    printf("%s\n", str);
    return 0;
}
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8123 / 4975 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
18.01.2017, 16:08 12
C
1
2
3
4
5
char str[N] , tmp;
int i,n, j, len;
printf("vvedite stroky dlinnoy n: ");
scanf("%s", str);
len = strlen(str);
0
nimazzzy
18.01.2017, 16:12
  #13

Не по теме:

Цитата Сообщение от kolyasik583 Посмотреть сообщение
len = strlen(str);
до ввода строки - мощно :D

0
kolyasik583
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 33
18.01.2017, 16:21  [ТС] 14
а, понял, спасибо.
0
18.01.2017, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 16:21

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

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

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


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

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

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