Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка русских слов

32K
22 января 2008 года
Lazarus Long
5 / / 29.11.2007
 
Код:
 
Проблема в том что программа сортирует слова в таком порядке : АБВ...Яабв...я, а мне требуется АаБбВв....Яя

Кто знает как решить данную поблему очень прошу помочь!
Если есть возможность, прошу написать прямо для моей программы!
Вот сам текст моей проги:


Код:
#include <locale.h>
#include <windows.h>
#include <ctype>
using std::isupper;
using std::islower;
using std::tolower;
using std::toupper;
#include <conio>
#include <iostream>
using std::cerr;
using std::cout;
using std::endl;
using std::fixed;
using std::ios;
using std::left;
using std::right;
using std::showpoint;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <iomanip>
using std::setw;
using std::setprecision;
#include <string>
using std::string;
#include <cstdlib>
using std::exit;
#define Size 2000
//----------------------//

              int main()
{
//setlocale(LC_CTYPE,"Russian");
   cout << "START.....\n";

//массивы для всяких нужд
string mass[ Size ]; //массив для сортировки слов
int    mass2[ Size ];//массив для номеров этих слов
//int    mass3[ Size ];//массив для номеров слов с большой буквы


//читаем и создаем файлы
   ifstream inClientFile( "18.txt", ios::in );
   ofstream outClientFile( "18sp.txt", ios::out);
   ofstream outClientFile2( "18sort.txt", ios::out);


//если нет файлов, то СТОП
   if ( !inClientFile )
      {   cerr << "File could not be opened" << endl;
          exit( 1 );   }
   if (!outClientFile )
      {   cerr << "File could not be opened" << endl;
          exit( 1 );   }
   if (!outClientFile2 )
      {   cerr << "File could not be opened" << endl;
          exit( 1 );   }//конец ВСЕХ если


//резервируем переменные
   int n=1;        //номер слова в файле
   int m=0;        //номер слова в массиве
   int mN;         //номер слова в отсортированом массиве
   char word[ 30 ];//слово из файла
   string word2;
   string PER;     //переменная для слов


   cout << "\nREADING WORDS FROM FILE.....";
   cout << "\n\nWRITING WORDS IN FILE.....";

//написали в файлы
   outClientFile << left << setw( 10 ) <<  "Number:"
      << "Word:" << endl;
   outClientFile2 << left << setw( 10 ) <<  "Number:"
      << "Word:" << endl;//закончили


//вывод номеров и слов на экран и в новый файл
while ( inClientFile >> word )
{
   //удаляем ненужные знаки
   int xLen=strlen(word);//динна обрабатываемого слова
   if ( word[0]=='\"' ||  word[0]=='-')
      {
         word[0]=NULL;
      }
   for (int i = 0; i < xLen; i++)
   {
      if (word=='\"' || word==',' || word=='.' ||
          word=='!' || word=='?' || word==':')
      {
         word=NULL;
      }
   }//удалили все ненужные знаки

//удаляем пустые ненужные слова
   if  (word[0]==NULL)
      {}//удалили
   //елси НЕ пустая, пишем в файл
   else
   {
   outClientFile << left << setw( 10 ) << n << word << endl;
   mass[m]=word;
   mass2[m]=n;
   n++;
   m++;

   }
}//закончили


   cout << "\n\nSORTING.....";


//сотрировка какая-то
for (int j = 1; j < m; j++)
{
   for (int i = 0; i < m-1; i++)
   {
      if (mass>mass[i+1])
      {
         PER = mass[i+1];
         mN = mass2[i+1];
          mass[i+1] = mass;
          mass2[i+1] = mass2;
         mass = PER;
         mass2 = mN;
      }
   }
}//конец сортировки


   cout << "\n\nWRITING IN FILE SORTED WORDS.....";


//вывод отсортированых слов в файл
for (int i = 0; i < m; i++)
{
      outClientFile2 << left << setw( 10 ) << mass2 << mass << endl;
}//закончили



   cout << "\n\nTHATS ALL FOLKS!!!";

   
   getch();
   return 0;

}


Заранее благодарен, Lazarus Long.....
11
22 января 2008 года
oxotnik333
2.9K / / 03.08.2007
а нельзя сделать TStringList::Sort()
три строчки кода будет

ЗЫ: коменты в коде жгут :)
92
22 января 2008 года
Тень Пса
2.2K / / 19.10.2006
студент =) по-любому
386
22 января 2008 года
newcss
297 / / 05.04.2005
Не студент а кнопкодав. Если влом думать, то юзай свитч
switch(knopkodav)
{
case 'A':
strcat(str,"A");
break;
case 'a':
strcat(str,"a");
break;
...
...
...
}
Скок языков и в каком порядке сортировать =), ну на скок сил хватит на столько и сделаешь если думать не хочешь ^_^
535
22 января 2008 года
Нездешний
537 / / 17.01.2008
Цитата:
//сотрировка какая-то
for (int j = 1; j < m; j++)
{
for (int i = 0; i < m-1; i++)
{
if (mass>mass[i+1])



надо сделать так, чтобы обе сравниваемые строки состояли либо только из символов в верхнем регистре, либо только в нижнем. Что-то вроде

 
Код:
if( ToUpper( mass ) > ToUpper( mass[i + 1] ) ) ...


конкретные функции не помню уже, так что найди их сам и поставь вместо ToLower или ToUpper. Ну или сам напиши...
32K
22 января 2008 года
Lazarus Long
5 / / 29.11.2007
Цитата: newcss
Не студент а кнопкодав. Если влом думать, то юзай свитч
switch(knopkodav)
{
case 'A':
strcat(str,"A");
break;
case 'a':
strcat(str,"a");
break;
...
...
...
}
Скок языков и в каком порядке сортировать =), ну на скок сил хватит на столько и сделаешь если думать не хочешь ^_^



Подскажите пожалуйста куда мне влепить Ваш switch, чтобы большие русские буквы переводились в маленькие, т.к. функции С++ toupper/tolower не работают с нашими символами...

Заранее благодарен, Lazarus Long.....

386
22 января 2008 года
newcss
297 / / 05.04.2005
Пишешь алфавит от А до Я
А -> заменяшь на а
а - оставляешь такой же
Б
б

ну и так далее... Программу за тебя здесь ни кто писать не будет.
Берешь строку, посимвольно сравниваешь по букавке. Как сделать сортировку? Юзай Хотя бы метод пузырька
Нет, это то када вы бежите за бутылкой а мы вам пишем программу.
Как запрограммить пузырек? Ручками, открываем Шилда и программим.
32K
22 января 2008 года
Lazarus Long
5 / / 29.11.2007
Цитата: newcss
Пишешь алфавит от А до Я
А -> заменяшь на а
а - оставляешь такой же
Б
б

ну и так далее... Программу за тебя здесь ни кто писать не будет.
Берешь строку, посимвольно сравниваешь по букавке. Как сделать сортировку? Юзай Хотя бы метод пузырька
Нет, это то када вы бежите за бутылкой а мы вам пишем программу.
Как запрограммить пузырек? Ручками, открываем Шилда и программим.



Полностью с Вами согласен. Но тогда хотябы расскажите что в вашем предыдущем посте значет:
knopkodav и str.

Заранее благодарен, Lazarus Long.....

386
22 января 2008 года
newcss
297 / / 05.04.2005
char stroca[100]="Hello World\0";
char knopkodav=stroca[1..N];
str - результирующая твоя хрень что на что поменять =) и что с чем объединиитть
535
23 января 2008 года
Нездешний
537 / / 17.01.2008
Код:
string RusToUpper(string sTarget)
{
     const OffsetAO = 'а' - 'А';
     const OffsetPR = 'я' - 'Я';

     for( int i = 0; i < sTarget.length(); i++ )
     {
           if( 'а' <= sTarget && sTarget <= 'п' )   sTarget -= OffsetAO;
           if( 'р' <= sTarget && sTarget <= 'я' )   sTarget -= OffsetPR;
     }

     return sTarget;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог