0 / 0 / 1
Регистрация: 27.04.2011
Сообщений: 84
1

Сортировка строки по алфавиту в классе String

14.12.2014, 18:30. Показов 8703. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Создал класс Stroka:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
using namespace std;
 
class Stroka
{
public:
    string *array;
    int strlength;
        Stroka();
        Stroka(string);
    void sortString();
};
Хочу сделать функцию сортировки строки по алфавиту, но никак не выходит сделать правильно. Запускаю, выдает не верный результат и окно закрывается. Что не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Stroka :: sortString()
{
    for (int i=0; i < strlength; i++)
        for (int j=0; j < strlength; j++)
        {
            if (array[j] > array[j+1])
            {
                string temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        cout<<array[i]<<endl;
        }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2014, 18:30
Ответы с готовыми решениями:

Сортировка по алфавиту в классе
Всем привет, недавно тут спрашивал по поводу классов, вот появилась новая проблема: В классе...

Сортировка string по алфавиту
Подскажите если сравниваем две переменные string работает ли правило сравнения их по алфавиту? Те...

Сортировка string по алфавиту в структуре
Итак, задача считать информацию из файла, в формате string\t char\t int\n и отсортировать в...

Сортировка массива string по алфавиту
Как отсортировать масив string по алфавите к примеру есть масив string на 10 елементов как...

6
7780 / 6550 / 2981
Регистрация: 14.04.2014
Сообщений: 28,608
14.12.2014, 18:51 2
Ты буквы в строке хочешь сортировать? Используй std::sort().
0
0 / 0 / 1
Регистрация: 27.04.2011
Сообщений: 84
14.12.2014, 19:13  [ТС] 3
Нет, сортировать слова. Разве такой способ, как у меня, не подходит для сортировки слов? Как в таком случае использовать sort?
0
7780 / 6550 / 2981
Регистрация: 14.04.2014
Сообщений: 28,608
14.12.2014, 19:25 4
Чтобы сортировать по словам, надо сначала разделить на слова. У тебя я этого не вижу.
0
0 / 0 / 1
Регистрация: 27.04.2011
Сообщений: 84
14.12.2014, 20:15  [ТС] 5
Нашел на форуме как разбивать строку на слова. Немного доделал, но ошибок много. Как правильно это делать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*stroka.h*/
#include <iostream>
#include <string>
 
using namespace std;
 
class Stroka
{
public:
    string *array;
    int strlength;
    Stroka();
    Stroka(string);
    void printstr();
    void sortString();
};
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
/*stroka.cpp*/
#include <iostream>
#include <string.h>
#include <cstring>
#include "stroka.h"
 
using namespace std;
 
Stroka :: Stroka()
{
    array = new string[20];
}
 
Stroka :: Stroka(string str)
{
    string s = str;
        strlength = strlen(s);
        string word; //будет содержать текущее слово из текста
        stringstream ss(s);
        string * arr; //массив со словами
       
       //считаем число слов
       int nCount = 0;
       while(ss>>word)
          nCount++;
       ss.clear(); //сбросили флаг EOF
       ss.seekg(0,ios::beg); //вернули поток вначало
       array = new string[nCount]; //память под массив
       int i = 0;//Счётчик
       while(ss>>word)
          array[i++] = word;
       cout<<"Words in text : "<<nCount<<endl;
       cout<<"\tThis words  : "<<endl;
       for(i = 0; i < nCount; i++)
           cout<<"word # "<<i + 1<<" : "<<array[i]<<endl;
      return 0;
}
 
void Stroka :: printstr()
{
    for(int i = 0; i < strlength; i++)
    {
        cout<<array[i]<<endl;
    }
}
 
void Stroka :: sortString()
{
    for (int i=0; i < strlength; i++)
        for (int j=0; j < strlength; j++)
        {
            if (array[j] > array[j+1])
            {
                string temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }
    cout<<array[i]<<endl;
}
0
59 / 59 / 12
Регистрация: 01.01.2010
Сообщений: 222
14.12.2014, 20:23 6
строка 49-52: происходит выход за границы массива.
C++
1
2
3
for(int i=0;i<strlength-1;i++)
for(int j=i+1;j<strlength;j++)
if (array[i] > array[j])
0
7780 / 6550 / 2981
Регистрация: 14.04.2014
Сообщений: 28,608
14.12.2014, 20:35 7
Слова храни в std::vector<std::string>, не придётся вручную выделять память. И разобрать на слова можно будет с помощью istream_iterator.
0
14.12.2014, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2014, 20:35
Помогаю со студенческими работами здесь

Тип String, сортировка имен по алфавиту
Program NameChek; Uses Crt; Const N=3; Var I,J:0..3; Buf:String; Line:array of...

Сортировка строки по алфавиту
Написала программу только по устранению лишних пробелов, но не могу сообразить как вывести слова в...

Сортировка строки по алфавиту
Здравствуйте, нужно отсортировать строку по алфавиту. Подскажите, как это реализовать? Есть массив...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru