Форум программистов, компьютерный форум CyberForum.ru

Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A - C++

Восстановить пароль Регистрация
 
jakis
 Аватар для jakis
1 / 1 / 0
Регистрация: 22.01.2012
Сообщений: 18
09.07.2014, 11:54     Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A #1
"Даны строки A и B. Если в A есть латинские буквы, а в B нет повторяющихся символов, то упорядочить символы B в алфавитном порядке и удалить латинские буквы из A; в остальных случаях продублировать русские буквы в A и удалить повторяющиеся символы из B." Такая вот задача...
Пользую dev c++ 5.4.2.
Дело вот в чем: ввожу в качестве первой строки такой набор: 1hы, а в качестве второй строки: 23hh34. В итоге должен выдать... "Преобразованная строка А:1ыы" и "Преобразованная строка В:24". Однако выдаёт: "Преобразованная строка А:1ыыmmm" и "Преобразованная строка В: [вообще пусто]". Помогите пожалуйста!

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<cstring>
main()
{
    int la,lb,cha,cha2,cha3,chb,chb2,chva,chva2,e,i,j;
    char A[100],B[100],v;
    printf("Введите строку A:");
    gets(A);
    la=strlen(A);
    printf("Введите строку B:");
    gets(B);
    lb=strlen(B);
    printf("Строка A:%s",A);
    printf("\nСтрока B:%s",B);
    printf("\nДлина строки А:%d",la);
    printf("\nДлина строки В:%d",lb);
    char vA[]="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
    char vA2[]="ЙЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбю";
    for(cha=0;cha<=la-1;cha++)
    {
        for(chva=0;chva<=52;chva++)
        {
            if(A[cha]==vA[chva])
            {
                la=strlen(A);
                for(cha2=cha;cha2<=la;cha2++)
                {
                    A[cha2]=A[cha2+1];
                }
            }
        }
    }
    la=strlen(A);
    for(cha=la-1;cha>0;cha--)
    {
        for(chva2=0;chva2<=66;chva2++)
        {
            if(A[cha]==vA2[chva2])
            {
                la=strlen(A);
                for(cha2=la;cha2>=cha;cha2--)
                {
                    A[cha2+1]=A[cha2];
                }
            }
        }
    }
    printf("\nПреобразованная строка А:%s",A);
    e=0;
    for(chb=0;chb<=lb-1;chb++)
    {
        for(i=1;i<=lb;i++)
        {
            if(B[chb]=B[i])
            {
                for(j=i;j<=lb;j++)
                {
                    B[j]=B[j+1];
                    e=1;
                }
            }
        }
    }
    lb=strlen(B);
    if(e==0)
    {
        for(i=0;i<=lb;i++)
        {
            for(j=1;j<=lb;j++)
            {
                if(B[i-1]<B[i])
                {
                    v=B[i-1];
                    B[i-1]=B[i];
                    B[i]=v;
                }
            }
        }
    }
    printf("\nПреобразованная строка В:%s",B); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2014, 11:54     Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A
Посмотрите здесь:

C++ Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены и переписать новый текст в файл D
Дана строка символов. Расставить введенные латинские символы в алфавитном порядке. C++
выбрать из строки все буквы и отсортировать их в алфавитном порядке C++
C++ Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить символы B в порядке, обратном к алфавитном
C++ Вывести символы латинского алфавита (глухие буквы) на экран, в обратном алфавитном порядке
C++ Парсинг строки: отобрать латинские символы
Напечатать все символы строки в алфавитном порядке C++
Все слова строки, которые начинаются с данной буквы, отсортировать в алфавитном порядке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
09.07.2014, 13:32     Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A #2
Цитата Сообщение от jakis Посмотреть сообщение
Если в A есть латинские буквы, а в B нет повторяющихся символов, то ... удалить латинские буквы из A
Перед тем, как удаляются латинские символы из A, у Вас ещё не проверена строка B.
Цитата Сообщение от jakis Посмотреть сообщение
C++
1
2
3
4
5
6
        for(chva=0;chva<=52;chva++)
        {
            if(A[cha]==vA[chva])
            {
                la=strlen(A);
                for(cha2=cha;cha2<=la;cha2++)
Т.к. нумерация начинается с нуля, номер последнего элемента == (длина-1).
jakis
 Аватар для jakis
1 / 1 / 0
Регистрация: 22.01.2012
Сообщений: 18
10.07.2014, 13:13  [ТС]     Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A #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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<cstring>
main()
{
    int i,j,k,e,lb;
    char A[80],B[80],min;
    printf("Введите строку А:");
    gets(A);
    printf("Введите строку В:");
    gets(B);
    char VerifA1[]="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrQqSsTtUuVvWwXxYyZz";
    char VerifA2[]="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя";
    /*Проверка строки А на наличие латинских символов*/
    e=0;
    for(i=strlen(A)-1;i>=0;i--)
    {
        if(strchr(VerifA1,A[i])!=NULL)
        {
            e=1;
        }
    }
    /*Проверка строки В на повторяющиеся символы*/
    i=0;
    int e1=0;
    while(i<=strlen(B)-1)
    {
        for(j=strlen(B)-1;j>i;j--)
        {
            if(B[i]==B[j])
            {
                e=1;
            }
        }
    }
    /*Решение в первом случае*/
    if(e==1 && e1==1)
    {
        for(i=strlen(A)-1;i>=0;i--)
        {
            if(strchr(VerifA1,A[i])!=NULL)
            {
                for(j=i;j<strlen(A);j++)
                {
                    A[j]=A[j+1];
                }
            }
        }
        i=0;
        while(i<=strlen(B)-1)
        {
            for(j=strlen(B)-1;j>i;j--)
            {
                if(B[i]==B[j])
                {
                    for(k=j;k<strlen(B);k++)
                    {
                        B[k]=B[k+1];
                    }
                }
            }
            i++;
        }
    }
    else
    /*Решение во втором случае*/
    {
        if(strchr(VerifA2,A[i])!=NULL)
        {
            for(j=strlen(A);j>=i;j--)
            {
                A[j+1]=A[j];
            }
        }
        for(i=0;i<=strlen(B)-2;i++)
        {
            min=B[i];
            k=i;
            for(j=i+1;j<=strlen(B)-1;j++)
            {
                if(B[j]<min)
                {
                    min=B[j];
                    k=j;
                }
            }
            B[k]=B[i];
            B[i]=min;
        }
    }
    printf("Преобразованная строка А:");
    puts(A);
    printf("Преобразованная строка В:");
    puts(B);
}
Проблема в том, что программа после введения значений тупо виснет

Добавлено через 8 минут
1. Нашел одну, в 33 строке
не так:
Цитата Сообщение от jakis Посмотреть сообщение
e=1;
,
а так:
Цитата Сообщение от jakis Посмотреть сообщение
e1=1;
.

Но программа все равно циклится на втором пункте, там, где "Проверка строки В на повторяющиеся символы"

Добавлено через 6 минут
Я понял, в 35 после "}" нужно было вписать "i++;"
Yandex
Объявления
10.07.2014, 13:13     Упорядочить символы строки B в алфавитном порядке и удалить латинские буквы из строки A
Ответ Создать тему
Опции темы

Текущее время: 21:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru