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

Отсортировать массив - C++

Восстановить пароль Регистрация
 
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 18:57     Отсортировать массив #1
Задан символьный массив размера N. Отсортировать массив так, что бы
сначала в нем в алфавитном порядке шли согласные буквы латинского
алфавита, а затем остальные элементы, порядок которых не меняется.
Пример: a d f e w h g u t b l o → b d f g h l t w a e u o

по-моему у меня где-то в проге происходит зацикливание
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
97
98
99
100
101
102
#include <iostream>
#include <stdlib.h>
 
#define swap(a,b) {char tmp;tmp=a;a=b;b=tmp;} 
 
bool check_1(char z) //ïðîâåðêГ* Г*Г* ГЈГ«Г*Г±Г*îñòü 
{
    char *x=(char*)calloc(6,sizeof(char));
    
    x[0]='a';
    x[1]='e';
    x[2]='i';
    x[3]='o';
    x[4]='u';
    x[5]='y';
    
    //ïîèñê ýëåìåГ*ГІГ* z Гў Г¬Г*Г±Г±ГЁГўГҐ x
    bool k=false;
    int i=0;
    do
    {
     if (x[i]==z)
      k=true;
      else
      i++;
    }
    while (i>6||k==true);
        
    free(x);
}
 
bool check_2(char z1) //ïðîâåðêГ* Г*Г* ÷èñëî
{
    char *y=(char*)calloc(10,sizeof(char));
 
    y[0]='0';
    y[1]='1';
    y[2]='2';
    y[3]='3';
    y[4]='4';
    y[5]='5';
    y[6]='6';
    y[7]='7';
    y[8]='8';
    y[9]='9';
    
    //ïîèñê ýëåìåГ*ГІГ* z1 Гў Г¬Г*Г±Г±ГЁГўГҐ y
    bool k=false;
    int i=0;
    do
    {
     if (y[i]==z1)
      k=true;
      else
      i++;
    }
    while (i>10||k==true);
    
    free(y);
}
 
 
int main()
{
    
    int n;
    cout<<"Insert number of symbols"<<endl;
    cin>>n;
    
    //ñîçäГ*Г*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ñèìâîëîâ
    char *s=(char*)calloc(n,sizeof(char));
    cout<<"Insert symbols"<<endl;
    for(int i=0;i<n;i++)
    cin>>s[i];
    
    //ïåðâîГ*Г*Г·Г*ëüГ*ûé Г¬Г*Г±Г±ГЁГў
    for(int i=0;i<n;i++)
    cout<<s[i]<<" ";
    
    cout<<endl;
    
    for(int i=0;i<n-1;i++)
    if ((check_1(s[i]))||(check_2(s[i]))&&(!check_1(s[i+1]))&&(!check_2(s[i+1])))
      swap(s[i],s[i+1]);
      
    //êîë-ГўГ® ГЎГіГЄГў ñîãëГ*Г±Г*ûõ
    int k1=0;
    for(int i=0;i<n;i++)
    if ((!check_1(s[i]))&&(!check_2(s[i])))
    k1++;
 
      
    //ïåðåñòГ*Г*îâêГ* ГЇГ® Г*ëôГ*ГўГЁГІГі
    for(int i=0;i<=k1-1;i++)
    if (s[i]>s[i+1]) swap(s[i],s[i+1]);
    
    //âûâîä Г*îâîãî Г¬Г*Г±Г±ГЁГўГ*
    for(int i=0;i<n;i++)
    cout<<s[i]<<" ";
     
    free(s);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2010, 18:57     Отсортировать массив
Посмотрите здесь:

Отсортировать массив C++
Отсортировать массив C++
C++ Отсортировать массив с помощью сортировки методом вставки
Отсортировать массив C++
C++ Отсортировать массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 18:58     Отсортировать массив #2
Artishok, За такое
C++
1
char*x=(char*)calloc(6,sizeof(char));
в С++ бьют ногами...
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:15  [ТС]     Отсортировать массив #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Artishok, За такое
C++
1
char*x=(char*)calloc(6,sizeof(char));
в С++ бьют ногами...

массив символов.ну можно было память не выделять и принять за строку конечно....
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 19:16     Отсортировать массив #4
Artishok, В С++ есть new/new[]. И delete/delete[] для очистки
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:18  [ТС]     Отсортировать массив #5
ну в данном случае это несущественно.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 19:37     Отсортировать массив #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ага?

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 <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    const std::string cons="bcdfghjklmnpqrstvwxz";
    std::string Str;
    std::string NewStr;
    std::getline(std::cin, Str);
    for(std::string::iterator Iter=Str.begin(); Iter!=Str.end();)
    {
         if(cons.find(*Iter)!=std::string::npos)
         {
              char c=*Iter;
              NewStr.push_back(c);
              Str.erase(Iter);
         }
         else
              ++Iter;
    }
    std::sort(NewStr.begin(), NewStr.end());
    int numb=NewStr.size();
    std::cout<<"Numb of cons: "<< numb <<'\n';
    NewStr+=Str;
    Str.clear();
    Str=NewStr;
    std::cout<<"Sorted string\n"<< Str <<'\n';
    return 0;
}
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 19:46  [ТС]     Отсортировать массив #7
точняк!не подумал создать строку из согласных.тогда это уменьшит код и упростит
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
03.11.2010, 20:25     Отсортировать массив #8
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
#include <iostream>
#include <string>
#include <algorithm>
 
bool IsConsonants(char a)
{
    static const std::string consonants("bcdfghjklmnpqrstvwxz");
    return consonants.find_first_of(a) != std::string::npos;
}
 
int main()
{
    std::string array;
    std::string::iterator part;
 
    std::cout << "Input array: ";
    std::cin >> array;
 
    part = std::stable_partition(array.begin(), array.end(), IsConsonants);
    if (part != array.end())
        std::sort(array.begin(), part);
 
    std::cout << "Array: " << array << std::endl;
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 22:33  [ТС]     Отсортировать массив #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
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
#include <iostream>
 
#define swap(a,b) {char tmp;tmp=a;a=b;b=tmp;} 
 
bool check(char c)
{
    char *s="bcdfghjklmnpqrstvwxz";
    bool k=false;
    for(int i=0;i<strlen(s);i++)
    if (c==s[i])
    {
     k=true;
     break;
    };
    if (k)
     return true;
     else
     return false;
}
      
     
 
 
int main()
{
    
    int n;
    cout<<"Insert number of symbols"<<endl;
    cin>>n;
    
    //ñîçäГ*Г*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ñèìâîëîâ
    char *s1=new char [n];
    cout<<"Insert symbols"<<endl;
    for(int i=0;i<n;i++)
    cin>>s1[i];
    
    //ïåðâîГ*Г*Г·Г*ëüГ*ûé Г¬Г*Г±Г±ГЁГў
    for(int i=0;i<n;i++)
    cout<<s1[i]<<" ";
    
    cout<<endl;
    
    //ïðîâåðêГ* ГЁ ïåðåñòГ*Г*îâêГ* ñèìâîëîâ
    for(int i=0;i<n-1;i++)
    if (!check(s1[i])&&check(s1[i+1]))
    swap(s1[i],s1[i+1]);
      
    //êîë-ГўГ® ГЎГіГЄГў ñîãëГ*Г±Г*ûõ
    int k1=0;
    for(int i=0;i<n;i++)
    if (check(s1[i]))
    k1++;
 
      
    //ïåðåñòГ*Г*îâêГ* ГЇГ® Г*ëôГ*ГўГЁГІГі
    for(int i=0;i<=k1;i++)
    if (s1[i]>s1[i+1]) swap(s1[i],s1[i+1]);
    
    //âûâîä Г*îâîãî Г¬Г*Г±Г±ГЁГўГ*
    for(int i=0;i<n;i++)
    cout<<s1[i]<<" ";
     
    delete [] s1;
}
теперь переставляет только первых несколько элементов а остальные элементы в массиве остаются неизменными
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
03.11.2010, 23:10     Отсортировать массив #10
Я немного изменил твой цикл, так работает правильно:
C++
1
2
3
4
5
6
7
//проверка и перестановка символов
        for(int i=0;i<n-1;i++)
        {
            if (!check(s1[i])&&check(s1[i+1])){
        swap(s1[i],s1[i+1]);
        i = -1; }
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2010, 23:52     Отсортировать массив
Еще ссылки по теме:

C++ Отсортировать массив
C++ отсортировать массив
C++ Отсортировать массив

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

Или воспользуйтесь поиском по форуму:
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
03.11.2010, 23:52  [ТС]     Отсортировать массив #11
ввел wertybones - получил rtbnsewyoe->неверно

Добавлено через 3 минуты
нашел ошибку.все.
Yandex
Объявления
03.11.2010, 23:52     Отсортировать массив
Ответ Создать тему
Опции темы

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