Форум программистов, компьютерный форум, киберфорум
Наши страницы

упорядочить по алфавиту - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Cумма элементов массива с нечетными номерами http://www.cyberforum.ru/cpp-beginners/thread380063.html
Помогите написать программу с одномерным массивом: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1)сумму элементов массива с нечетными номерами; 2)сумму элементов...
C++ Помогите с симестровыми. http://www.cyberforum.ru/cpp-beginners/thread380060.html
C++ Помогите в написании программы по С++
Условие: Реализуйте следующий алгоритм обработки двумерной матрицы:найти диапозон значений элементов для каждой строки двумерной матрицы.Результатом должен быть двумерный массив размером Nx2 Я...
Вычислить длину отрезка по координатам вершин C++
1)разработать функцию f(x1,y1, x2, y2), которая вычисляет длину отрезка по координатам вершин (x1,y1) и (х2,у2), и функцию d(a,b,c), которая вычисляет периметр треугольника по длинам сторон a,b,c. С...
C++ Баг компилятора? Или я чего то не догоняю? http://www.cyberforum.ru/cpp-beginners/thread380045.html
Компилил в 2008 студии. Вопрос: ПОЧЕМУ ЭТОТ КОД КОМПИЛИРУЕТСЯ? class Bee { private: template<class Foo2> Bee& operator =(const Bee<Foo2>&) {
C++ помогите с прогой Даны строки A и B. Если строки состоят из одних и тех же символов и в A нет повторяющихся символов, то упорядочить символы A в алфавитном порядке и удалить из B русские буквы; в остальных случаях... подробнее

Показать сообщение отдельно
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
09.11.2011, 00:16
Вот мой пример, на первый взгляд может показаться тяжеловат
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include<conio.h>
#include <string>
using namespace std;
 
void main()
{
 
    char massiv[]={"aaaaaaaaadddddddd1 hhhhhhhhhhhh2 bbbbbbbbbbbbbb3 dddddddddddd4"};//создаём строку с текстом
    
        unsigned long z,stet_probelov=0,j,i,size;
    size=strlen(massiv);// вычисляем длину строки
    // сначала посмотрим, сколько пробелов в тексте, чтобы узнать, сколько слов создавать
    for(i=0;i<size;i++){
    if(massiv[i]==' ')// если элемент равен пробелу, то добавляем количество слов
        stet_probelov++;
    }
//затем создаём динамический массив , его размер зависит от того, сколько пробелов встретилось 
    //и добавляем к кол-ву пробелов +1 т.к. 2 пробела, это 3 слова, 4 пробела, это 5 слов и так далее
    // массив размером size Х stet_probelov+1; (сколько символов в первом массиве на сколько пробелов+1) 
    char **massiv2;
    massiv2= new char*[size];
    for (int i = 0; i !=stet_probelov+1 ; ++i)
        massiv2[i]=new char[stet_probelov+1];
    char *temp_slovo= new char [size];// временный массив для копирования слова (Потом понадобится)
    
    unsigned long *razmer_slov,*massiv_nachal,*massiv_koncov;
    massiv_nachal=new unsigned long [stet_probelov+1];// содержит координаты начал слов, чтобы знать, откуда и докуда выводить слово
    massiv_koncov=new unsigned long [stet_probelov+1];// содержит координаты концов слов, чтобы знать, откуда и докуда выводить слово
    razmer_slov=new unsigned long[stet_probelov+1];//здесь хранить будем рамрер слов, нужно для сравнения слов будет
    
    // теперь заносим символы в массив
    i=0;j=0;
    for(j=0;j<stet_probelov+1;j++)
    {
        massiv_nachal[j]=i;// циклично заносим в этот массив координаты начал слов
        z=0;
        while((i<size)&&(massiv[i]!=' '))
    {
    massiv2[j][z]=massiv[i];// заносим из основного массива jое слово
    z++;i++;
    }
i++;
 
massiv_koncov[j]=i-1;// минус один, так как у нас в цикле while i стал равным номеру символа с пробелом, значит слово
//закончится на предыдущем элементе
    razmer_slov[j]=massiv_koncov[j]-massiv_nachal[j];//вычисляем размер слова
    }//Итак, слова получили, теперь стоит задача упорядочить слова по алфавиту
    bool obmen=false;// переменная для проверки менять слова или нет
    unsigned long i1,i2,j1,j2;
    unsigned long temp2,temp;//Временная переменная для обмена значениями
    for(i=0;i<stet_probelov+1;i++)
    {
        for(j=0;j<stet_probelov;j++)
        {i1=0;
        if(razmer_slov[j]<razmer_slov[j+1])//выбираем, какое из слов короче, чтобы при посимвольном сравнении программа
            // не зависла!
            temp=razmer_slov[j];
        else
            temp=razmer_slov[j+1];
        // сверять слова по алфавиту будем до тех пор,
            // пока не кончится длина сверяемых слов
        
            for(i2=0;i2<temp;i2++){
if(massiv2[j][i2]>massiv2[j+1][i2])// если у 2ого слова буква младше(в смысле А младшн , чем B), то решаем, что 1е слово нужно
    //обменять со вторым
    {obmen=true;
goto m1;//выяснили, что нужно обменять, и выходим   
}
else if(massiv2[j][i2]<massiv2[j+1][i2])// если у 2ого слова буква старше(в смысле B старше , чем А), то решаем, что 1е слова
    //НЕ нужно обменять, и выходим
    {obmen=false;
goto m1;//выяснили, что НЕ нужно обменять, и выходим    
}
// если не выяснили нужно менять или нет, то повторяем цикл     
            }
 
            m1:;
    
            //теперь мы выяснили, стоит ли менять места словами, или нет
            if(obmen==true)
            {// если надо менять, то меняем все параметры!!!
            // Во временный массив копируем слово
            for(j2=0;j2<razmer_slov[j];j2++)
                temp_slovo[j2]=massiv2[j][j2];// посимвольно копируем слово во временный массив
            for(j2=0;j2<razmer_slov[j+1];j2++)
            massiv2[j][j2]=massiv2[j+1][j2];// копируем J+1ое слово в Jое слово, так как Jое уже скопировали
            for(j2=0;j2<razmer_slov[j];j2++)
            massiv2[j+1][j2]=temp_slovo[j2];// копируем из временного массива слово в J+1ое слово
        // И обмениваем параметры слов массивов
            //сначала размеры
            temp2=razmer_slov[j];
            razmer_slov[j]=razmer_slov[j+1];
            razmer_slov[j+1]=temp2;
            // Затем координаты начал слов 
            temp2=massiv_nachal[j];
            massiv_nachal[j]=massiv_nachal[j+1];
            massiv_nachal[j+1]=temp2;
            // И , аналогично, координаты концов слов
            temp2=massiv_koncov[j];
            massiv_koncov[j]=massiv_koncov[j+1];
            massiv_koncov[j+1]=temp2;
 
            }
        
        
        
        }
    
    }
    //выводим получившийся массив
    for(j=0;j<stet_probelov+1;j++){
        for(i=0;i<razmer_slov[j];i++){
            cout<<massiv2[j][i];}
    cout<<endl;// чтобы разделить на строки
    }
 
    getch();//Для задержки на экране
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.