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

Сортировка слов в строке по алфавиту - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переписать код Delphi в С++ http://www.cyberforum.ru/cpp-beginners/thread212484.html
procedure Add2History(const aURL:string); var idx:integer; begin with Form5.RibbonComboBox1 do begin idx:=Items.IndexOf(aURL); case idx of -1:Items.Insert(0,aURL); 0:exit; else
C++ Выбрать три разные точки заданного на плоскости множества точек, составляющие треугольник наибольшего периметра Задание, как множество точек вывести на экран понял. #include <iostream> #include <time.h> #define _CRT_SECURE_NO_DEPRECATE 0 using namespace std; int _tmain() { setlocale(LC_ALL,"Russian"); int* A; http://www.cyberforum.ru/cpp-beginners/thread212478.html
Иконка для консоли C++
Здравствуйте, господа. Можно ли каким-то образом прикрепить иконку к консольному приложению, которое было написано на борланде? Заранее благодарю за возможные ответы. Добавлено через 6 часов 49 минут Неужели нету никакого способа?
генерация случайных чисел в linux C++
randomize(); int a; a=random(100); пишет, что нет декларации randomize() в этой области видимости, хотя stdlib.h я подключил подскажите, что с этим делать?
C++ связанные списки http://www.cyberforum.ru/cpp-beginners/thread212438.html
плиз помогите написать задачку: Запросить у пользователя число n. Построить связный список из n элементов, заполненный случайными числами из диапазона . Выполнить над связным списком действие определенное в вашем варианте. Вывести на экран связный список до и после выполнения указанного действия. вариант:Построить еще один список, аналогичный условию задачи. Запросить у пользователя число...
C++ Есть ли слово, содержащее одну согласную, возможно несколько раз Срочно нужно написать программу на C или C++ ! (сижу на экзамене): "Есть ли слово, содержащее одну согласную, возможно несколько раз" Заранее спасибо !!!! подробнее

Показать сообщение отдельно
Nerevarine
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 8

Сортировка слов в строке по алфавиту - C++

16.12.2010, 16:26. Просмотров 8854. Ответов 16
Метки (Все метки)

Дана строка из слов через пробел.Надо рассортировать слова по алфавиту и распечатать новую строку.
Использовать библиотеки iostream и string.Нельзя пользоваться поинтерами и динамичискими массивами.

То что я сделал работает так,выдирает слова из строки в 2 дополнительные строки сравнивает и меняет их если нужно.Если все слова одинаковой длинны все работает отлично,как только слова разной длинны начинается бардак.Не могу понять почему

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
void sorting(string user_string,int word_count)
{ int arr[max_size];
  int offset=0,a=0;
  cout << "Array one:" << endl;
     while((offset=user_string.find(" ", offset))!=string::npos)   // проверяет где стоят пробелы
        {      offset++;
               arr[a]=offset;
               a++;
               cout << offset << ", " << endl;
                
        }
    int u_length=user_string.length();
    int m1_length=0;
    int s1_length=0;
    string main_string;
    string slave_string;
    int mloop=word_count-1,sloop=mloop;
    int m_start=0;
    int m_length=arr[0]-1;
    int s_start=0;
    int s_length=0;
    int d=0;
  
    for(int i=0,j=1;i<mloop;i++,j++)    // верхний луп работатет с первым словом
  {
      
      main_string=user_string.substr(m_start,m_length);   
      for(int n=0,m=1;n<sloop;n++,m++)     //этот по одному сравнивает остальные слова с первым
       {
        s_start=arr[n+d];
        cout << "S_start:" << s_start << endl;      
        if(n==sloop-1){s_length=u_length-arr[n+d];}
        else {s_length=arr[m+d]-arr[n+d]-1;}
        cout << "User l:"<< u_length<<endl;
        cout << "Array:" << arr[n]<< endl;
        cout << "S_lengh:" << s_length << endl;
        slave_string=user_string.substr(s_start,s_length);
        cout << "Main string before:"<< main_string << endl << "Slave string before:"<< slave_string<< endl;
        if(main_string.compare(slave_string)>0)
          {main_string.swap (slave_string);}
        cout <<"main string:"<< main_string << endl << "slave string:" << slave_string << endl;
        cout<< "M_start:"<<m_start<<endl;
        m1_length=main_string.length();
        s1_length=slave_string.length();
        //if(m1_length>m_length){m_start=m_start+(m1_length-m_length);}
        user_string.replace(m_start,m_length,main_string);
        if(m1_length>m_length){s_start=s_start+(m1_length-m_length); s_length=m1_length;}
        user_string.replace(s_start,s_length,slave_string);
        cout << "user_string:" << user_string << endl;
          offset=0;
          cout << "array:" ;
        while((offset=user_string.find(" ", offset))!=string::npos)    // очередной поиск пробелов после замены
         {      offset++;
                arr[a]=offset+1;
                a++;
                cout << arr[a]<< ", " << endl;
          }
        
      }
      sloop--;
      d++;
      m_start=arr[i];
      m_length=arr[j]-arr[i]-1;
 
  }
Вообщем использую пузырьковый метод.
Буду очень благодарен если все это можно сделать более легким способом.Кстати если слова только 2 то проблемы нет
Вся куча coutов это только для меня чтоб смотреть что происходит с переменными,в конечной функций их не будет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru