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

Сортировка букв английского алфавита - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 13:24     Сортировка букв английского алфавита #1
Здравствуйте, помогите решить проблему не пойму в чём дело необходимо отсортировать слова:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void SetsManipulation::sortA()
{
    int count=0;
    for(int k=0;setOne[k]!='\0';k++)
    {
        count++;
    }
    for (int i=0;i<count-1;i++)
    for (int j=i+1;j<count;j++)
    if(setOne[i]>setOne[j])
    {
    swap(setOne[i],setOne[j]);
    }
    cout<<setOne<<endl;
}
Unhandled exception at 0x003b4ef0 in test.exe: 0xC0000005: Access violation writing location 0x003ba996.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2011, 13:24     Сортировка букв английского алфавита
Посмотрите здесь:

Из строки удалить все символы, кроме пробелов, не являющиеся буквами английского алфавита C++
Подсчитать количество букв русского алфавита из файла .txt C++
C++ Определить номера букв русского алфавита
C++ Перебор всех слов латинского алфавита длиной 1-4 букв
C++ Как заполнить массив буквами английского алфавита ?
C++ Сортировка русского алфавита с буквой ё
В строке слов из букв латинского алфавита найти слова, в которых нет букв, которые повторяются. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 13:28     Сортировка букв английского алфавита #2
А что сортируете то?
Если массив чаров, то зачем использовать это
C++
1
2
3
4
for(int k=0;setOne[k]!='\0';k++)
{
count++;
}
если есть strlen?
А если std::string, то терминальный нуль вы в нем не встретите. И для него есть методы length() и size()
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 13:30  [ТС]     Сортировка букв английского алфавита #3
дело в том что нельзя пользоваться библиотекой <string.h>
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 13:36     Сортировка букв английского алфавита #4
Наверное в конце вашей строки нет терминального нуля.
И раз уж используете swap из <algorithm>, то не проще ли использовать sort оттуда-же?
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 13:42  [ТС]     Сортировка букв английского алфавита #5
можете пожалуйста показать пример с моими переменными?
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 13:46     Сортировка букв английского алфавита #6
C++
1
2
sort(setOne, setOne + count);
cout << setOne;
Но в общем-то у вас правильный алгоритм, скорее всего проблема в том, что символа конца строки нету, или строка переполняется.
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 13:46  [ТС]     Сортировка букв английского алфавита #7
SetsManipulation obj("afzjk"); это прописано в main но выскакивает ошибка, Unhandled exception at 0x00b84ef0 in test.exe: 0xC0000005: Access violation writing location 0x00b8a996.
C++
1
2
3
4
5
6
void swap(_Ty& _Left, _Ty& _Right)
    {   // exchange values stored at _Left and _Right
    _Ty _Tmp = _Move(_Left);
    _Left = _Move(_Right);  <--указывает на этот элемент.
    _Right = _Move(_Tmp);
    }
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 13:57     Сортировка букв английского алфавита #8
Где объявление setOne? Где задание значения строки? Где телепаты?
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 14:01  [ТС]     Сортировка букв английского алфавита #9
char* setOne; в классе в файле Set.h
в main.cpp SetsManipulation obj("afzjk");
функции в файле SetsManipulation.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void SetsManipulation::sortA()
{
int count=0;
for(int k=0;setOne[k]!='\0';k++)
{
count++;
}
for (int i=0;i<count-1;i++)
for (int j=i+1;j<count;j++)
if(setOne[i]>setOne[j])
{
swap(setOne[i],setOne[j]);
}
cout<<setOne<<endl;
}
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 14:04     Сортировка букв английского алфавита #10
Что, прям константная строка и сортируется, выходит? Без копирования в массив? Тогда "Access violation writing location" не удивительно.

Добавлено через 2 минуты
Конструктор покажи.
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 14:05  [ТС]     Сортировка букв английского алфавита #11
можно по проще объяснить, мне необходимо сделать сортировку как это можно сделать без string.h?

C++
1
SetsManipulation(char* s1,char* s2);
там две группы но показал только одну.
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 14:07     Сортировка букв английского алфавита #12
Ну меня определение интересует, а не прототип. Секретный что ли?
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 14:07     Сортировка букв английского алфавита #13
char * - это указатель на константу.
Что такое константа, вы, надеюсь, знаете?
Объявляйте статически
C
1
char setOne[100];
Или динамически выделяйте память
C++
1
char * setOne = new char[100];
Но не забудьте потом ее освободить.
C++
1
delete[] setOne;
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 14:09     Сортировка букв английского алфавита #14
Цитата Сообщение от diagon Посмотреть сообщение
char * - это указатель на константу.
Ну, в общем, нет А вот присваивается ему, похоже, указатель на константу.
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 14:09  [ТС]     Сортировка букв английского алфавита #15
я просто не понимаю что необходимо показать, секретность здесь не причём.

diagon, у меня 18 функций проблема с двумя можно как-то решит проблему с тем что есть или надо изменит на char setOne[100];?
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 14:10     Сортировка букв английского алфавита #16
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну, в общем, нет
Ну я про такое определение
C++
1
char * str = "abc";
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 14:10     Сортировка букв английского алфавита #17
Цитата Сообщение от Diesel101 Посмотреть сообщение
я просто не понимаю что необходимо показать, секретность здесь не причём.
Код конструктора, а не его прототип.
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 14:13  [ТС]     Сортировка букв английского алфавита #18
C++
1
2
3
public:
    SetsManipulation(); // default constructor "?"
        SetsManipulation(char* s1,char* s2);  // constructor

C++
1
2
3
4
5
SetsManipulation::SetsManipulation(char* s1,char* s2)
{
    setOne=s1;
    setTwo=s2;
}
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 14:14     Сортировка букв английского алфавита #19
Цитата Сообщение от Diesel101 Посмотреть сообщение
diagon, у меня 18 функций проблема с двумя можно как-то решит проблему с тем что есть
Ну если те 16 функций не трогают строку - может быть.
Но так делать неправильно.
или надо изменит на char setOne[100]?
Надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2011, 14:15     Сортировка букв английского алфавита
Еще ссылки по теме:

Заполнить матрицу случайными символами английского алфавита; вывести, сколько раз встречается каждый символ C++
Проверить вхождение всех букв алфавита в заданное множество C++
C++ Удаление из строк всего,кроме букв латинского алфавита
C++ Исправить код парсера так, чтобы он работал только с буквами английского алфавита
C++ Ввести строку символов и заменить большие буквы английского алфавита в диапазоне от ‘G’ до ‘V’ на маленькие

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
01.08.2011, 14:15     Сортировка букв английского алфавита #20
Ну вот, точно. В результате setOne указывает на константу, которую нельзя изменять.
Так что как сказал diagon, надо выделять память под массив и копировать туда строку.
Yandex
Объявления
01.08.2011, 14:15     Сортировка букв английского алфавита
Ответ Создать тему
Опции темы

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