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

Класс Sentence и сортировка строки по алфавиту - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсия. Составьте программу, которая для заданных значений n и m, определит номер оставшегося в кругу человека http://www.cyberforum.ru/cpp-beginners/thread897740.html
Пусть n человек встали в круг и получили номера от 1 до n по часовой стрелке. Затем, начиная с первого, по часовой стрелке отсчитывается m человек. Этот m–й человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m–й человек. Так продолжается до тех пор, пока не останется один человек. Составьте программу, которая для заданных значений n и m, определит номер оставшегося...
C++ Turbo C++ где можно скачать турбо си? http://www.cyberforum.ru/cpp-beginners/thread897737.html
Как вызвать в main данные функции? C++
Вот весь код,приму любые замечания,так как я еще учусь) Ткните меня в мои же ошибки) using namespace std; template <class T>//Создаем дерево class Tree { struct Node { T item; Node *son;//создаем сыновей Node *brother;//создаем элементы ,которые располагаеются на том же уровне данного дерева
C++ Конвертер линейных уравнений
Мне нужно сконвертировать линейное уравнение так, что бы получилось уравнения для процессора Привер: (2+3)*5 -> 2 3 + 5 * Вопрос только в том, как называется данная конвертация?
C++ Массив: номер минимального и максимального по модулю элемента массива http://www.cyberforum.ru/cpp-beginners/thread897717.html
В одномерном массиве состоящем из n вещественных элементов вычислить:1) номер минимального и максимального по модулю ялемента массива 2) сумму элементов массива, расположенных после первого положительного элемента . Сжать массив,удалив из него ,меньших некоторого заданного числа a.
C++ Очередь (undefined symbol) #include <vcl.h> #pragma hdrstop #include <conio.h> #include <iostream.h> #include <fstream.h> //---- struct oku { string f; int gruppa; подробнее

Показать сообщение отдельно
Vlad708
4 / 4 / 0
Регистрация: 04.11.2012
Сообщений: 72
11.06.2013, 12:07     Класс Sentence и сортировка строки по алфавиту
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
 
class Sentence {
    public:
        char *str;
        Sentence(char *p);
        char* sort();
        char* getWord(int i, char *w);
        int getWordsCount();
        ~Sentence() {
             delete []str;
        }
};
 
void main() {
    clrscr();
    char a[1024];
    cout << "Введите предложение" << endl;
    gets(a);
    Sentence *s;
    s = new Sentence(a);
    int len = s->getWordsCount();
    cout << "Количество слов в строке: " << len << endl;
    cout << s->sort();
    getch();
}
 
Sentence::Sentence(char *p) {  
    str = strdup(p);    
}
 
int Sentence::getWordsCount() {   
    int sum = 0;
    char tmp[256];
    char *buf = this->str;
    while(sscanf(buf,"%s",tmp) ==1) {
        buf = strstr(buf,tmp) + strlen(tmp);
        sum++;
    }
    return sum;
}
 
char* Sentence::getWord(int i, char *w) {    //char*
    char tmp[256];
    char *r;
    char *x = this->str;
    while(sscanf(x,"%s",tmp)==1 && i) {
        x = strstr(x,tmp) + strlen(tmp);
        i--;
        r = x;
//      while(*r==' ') {r+1;}
    }
    if (i==0) {
        strcpy(w,tmp);
        return r;
    } else
         return NULL;
}
 
char* Sentence::sort() {
    int count = this->getWordsCount();
    char result[256];
    for (int i=0; i<count; i++) {
        for (int j=i; j<count-1; j++) {
            char A[256];
            char B[256];
            char *a = getWord(j,A);
            char *b = getWord(j+1,B);
            if ( strcmp( A,B ) > 0  ) {
                char s1[256];
                char s2[256];
                strncpy(s1,this->str,b-str);
                s1[b-str] = 0;
                strcpy(s2,b+strlen(B)); //+B. . .b+
                sprintf(this->str,"%s%s%s",s1,A,s2);
 
                strncpy(s1,this->str,a-str);
                s1[a-str] = 0;
                strcpy(s2,a+strlen(A));     //a+ // /+A
                sprintf(this->str,"%s%s%s",s1,B,s2);
            }
        }
    }
    return this->str;
}
Вообщем имеется класс Sentence, который может выводить количество слов введенного предложения + сортировка по алфавиту строки.
Проблема в том что, сортировка производится неправильно и программа работает некорректно (во время ввода предложения - чёрный экран и приходится нажимать CTR+BREAK)
Помогите, если кто сможет!!

Добавлено через 15 часов 55 минут
Всё еще нужна помощь((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru