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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
#1

Сортировка символов в строке - C++

23.02.2013, 00:39. Просмотров 3935. Ответов 30
Метки нет (Все метки)

Помогите пожалуйста составить понятную для начинающего программиста программу.

Выполнить сортировку символов в строке. Порядок возрастания "весов" символов задать таблицей вида char ORD[] = "АаБбВвГгДдЕе1234567890"; Символы, не попавшие в таблицу, размещаются в конце отсортированной строки.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 00:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка символов в строке (C++):

Сортировка символов в каждой строке по алфавиту - C++
Программа не работает Код: #include <iostream> #include <fstream> using namespace std; int main(int argc, char *argv) { ...

Сортировка символов в строке, виртуальные функции - C++
Всем привет! Помогите пожалуйста, нужно написать лабу на С++: базовый класс "строки" с виртуальной функцией сортировки строки с выводом...

В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом - C++
Народ, помогите пожалуйста. Нужно написать программу, используя динамический массив. Вот условие задачи: В строке символов найти...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

В строке символов установить пробелы вместо символов,номера позиций которых при делении на 6 дают в остатке 3 - C++
и вот 2 задачка. В заданной строке символов установить пробелы вместо символов,номера позиций которых при делении на 6 дают в остатке 3. ...

Дана строка символов, пользователь вводит комбинацию символов проверить сколько раз встечается эта комбинация в строке. - C++
Дана строка символов, пользователь вводит комбинацию символов проверить сколько раз встечается эта комбинация в строке. Например: Мама,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
23.02.2013, 17:08 #16
Цитата Сообщение от xtorne21st Посмотреть сообщение
Вот вариант с "широкими" символами (только не удивляйтесь если увас работало, а где-то в другом месте нет)
Хотя по идее должно работать на большенстве машин
0
unit7
30 / 30 / 4
Регистрация: 07.08.2012
Сообщений: 86
23.02.2013, 17:10 #17
А вы скажите что вот здесь происходит?
C++
1
2
3
4
5
6
7
for (i=0,t=0; ord[i]!='\0', t<strlen(ss1); i++,t++)
{
for(int i=0; i<=23; i++)
{
if (ss1[t]==ord[i])
cout<<ss1[t];
}
Я по сути только этот цикл и заменил в своей версии.
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
23.02.2013, 17:12  [ТС] #18
unit7, там выводит только те символы которые встречались в ord.Пробовал выводить все остальные символы в конце не получилось чужь какую-то выводит!
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
23.02.2013, 17:14 #19
Цитата Сообщение от Azazu Посмотреть сообщение
Товарищи, вы мне скажите этот код можно доделать ?
Этот код доделать можно, переделав его полностью). Ещё раз прочитайте что я вам писал.
C++
1
char ord[]="АаБбВвГгДдЕе1234567890";
Здесь вы пытаетесь запихнуть двубайтовые символы в однобайтовый char...
Тут
C++
1
t<strlen(ss1)
Вы вычисляете размер при помощи "однобайтовой" функции.
Посмотрите мой код для широких символов - он рабочий.

Добавлено через 1 минуту
Сортировка символов в строке
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
23.02.2013, 20:09  [ТС] #20
unit7,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int len = strlen(ss1), lenOrd = strlen(ord);
    
    for (int i = 0; i < len - 1; ++i) {
        for (int j = i + 1; j < len; ++j) {
            int first = -1, second = -1;
            for (int k = 0; k < lenOrd; ++k) {
                if (ss1[i] == ord[k])
                    first = k;
                if (ss1[j] == ord[k])
                    second = k;
            }
            
            if (first == -1 || (first > second && second != -1))
                swap(ss1[i], ss1[j]);
        }
    }
теперь объясните мне пожалуйста что в этом коде происходит?

Здесь вы пытаетесь запихнуть двубайтовые символы в однобайтовый char...
Тут
C++
1
t<strlen(ss1)
Вы вычисляете размер при помощи "однобайтовой" функции.


А если использовать unsigned int?

Добавлено через 12 минут
unit7, кстати ваш код действительно не компилируется!

Добавлено через 2 часа 31 минуту
xtorne21st, я тут посмотрел ваш код и убедился что он работает не правильно!Вы его сами проверяли?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
23.02.2013, 21:59 #21
Цитата Сообщение от Azazu Посмотреть сообщение
xtorne21st, я тут посмотрел ваш код и убедился что он работает не правильно!Вы его сами проверяли?
Аргументы в студию.
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
23.02.2013, 22:41  [ТС] #22
Цитата Сообщение от xtorne21st Посмотреть сообщение
Аргументы в студию.
Аргумент в виде скриншота :
0
Миниатюры
Сортировка символов в строке  
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
23.02.2013, 23:19 #23
Цитата Сообщение от Azazu Посмотреть сообщение
Аргумент в виде скриншота :
Ну так где ошибка? Вот наша таблица символов : "AaBbCcDdEe1234567890"
В неё не попали символы "hllo" которые размещены в конце. Что не так то?
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
23.02.2013, 23:28  [ТС] #24
Не правильно отсортировано!должно быть Ade12569hllo!
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
24.02.2013, 00:26 #25
Цитата Сообщение от Azazu Посмотреть сообщение
Не правильно отсортировано!должно быть Ade12569hllo!
В таком случаи нужно что-то поаригенальней тривиального баблсорта, ну или как минимум сочинить подходящий предикат.
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
24.02.2013, 18:47  [ТС] #26
Скажите пожалуйста можно ли этот код переделать под русские буквы?
Если можно был бы очень благодарен если сможете переделать!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    setlocale(0,"");
    const int n=80;
    char line[n];
 
    cout<<"Введите строку: ";
    cin.getline(line,n);
    for(int i=1;i<strlen(line);i++)
        for(int j=strlen(line)-1;i<=j;j--)
            if(strchr("AaBbCcDdEe1234567890",line[j]))
            {
                char temp=line[j];
                line[j]=line[j-1];
                line[j-1]=temp;
            }
            cout<<line;
            cout<<endl;
            return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от xtorne21st Посмотреть сообщение
Не советую вам работать с русскими символами, может быть такая ситуация, что на одной машине программа будет работать, а на другой нет(.
Кстати мне нужно именно с русскими буквами!
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
24.02.2013, 19:06 #27
Сортировка символов в строке
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
24.02.2013, 19:13  [ТС] #28
xtorne21st, а код который указан выше(см.предыдущий пост) без широких символов нельзя доделать? С unsigned char например?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
24.02.2013, 19:46 #29
Цитата Сообщение от Azazu Посмотреть сообщение
xtorne21st, а код который указан выше(см.предыдущий пост) без широких символов нельзя доделать? С unsigned char например?
нет

Добавлено через 3 минуты
char = 1 байт с диапазоном от -128 до + 127 и он предназначен для хранения только acsii символов, остальные, unicode например (русские) сюда просто не влезут.

Добавлено через 1 минуту
если взять unsigned char диапазон будет от 0 до 255 что тоже будет составлять одни байт

Добавлено через 38 секунд
А у вас каието проблемы c wchar_t?
0
Azazu
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 22
24.02.2013, 19:52  [ТС] #30
Цитата Сообщение от xtorne21st Посмотреть сообщение
А у вас каието проблемы c wchar_t?
Проблема в том что до вчерашнего дня я не сталкивался с таким типом данных)
Ну хорошо тогда тот код код который выше можно переделать с wchar_t?
Именно переделать!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2013, 19:52
Привет! Вот еще темы с ответами:

Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строке - C++
Текст, состоящий не более чем из 255 символов, разбейте на строки длиной не более 50 символов в строке. Переносите только на месте...

Найти количество символов всех строк файла и количество символов в определенной строке - C++
Здравствуйте! Я хотел бы попросить помощи в решении задачки! У меня не получается найти количество символов всех строчек и количество...

Есть двумерный массив символов, в каждой строке находится номер, мне надо к каждой строке добавить "8029" как это сделать? - C++
Есть двумерный массив символов, в каждой строке находится номер, мне надо к каждой строке добавить &quot;8029&quot; как это сделать? Есть функция...

Сортировка символов в C++ - C++
Напишите пожалуйста программу сортировки символов введенной с клавиатуры строки. Буду очень благодарна..


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.02.2013, 19:52
Ответ Создать тему
Опции темы

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