2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ строки
Сообщение27.05.2012, 17:32 


12/05/12
19
Доброго времени суток. :cry:
Дано осмысленное текстовое сообщение(содержащее слова,разделенные пробелами,знаками препинания,в конце сообщения стоит точка). Поменять слова в сообщении по принципу: первое со вторым,третье с четвертым и т.д.

Проблема номер раз: не представляю по какому алгоритму это делать. Вот задумка :
1)находим в исходной строке первое слово,выделяем как подстроку,копируем в строку№1, находим второе слово и 2)копируем его в строку№2;
3)удаляем из исходной строки 2 этих слова;
4)в новую строку№3 вставляем строку№2,а затем строку№1.
5)очищаем строку№1 и строку№2.
Все это будет происходить в цикле.


не ругайте громко,пожалуйста( строки в С++ это для меня больная тема...



вот код:

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
  1. #include <iostream>
  2. #include <string>
  3.  using namespace std;
  4. int main()
  5. {
  6. string str,s1,s2,s;  // str- ishodnaya srtoka
  7. string razdel=",.;:!-? ";
  8. string::size_type k=0, pos=0,k2=0;
  9.  cout<<"vvedite srtoku:";
  10.  getline(cin,str);
  11. k=str.find_first_of(razdel,pos);
  12. k2=str.find_first_of(razdel,k+1);
  13.  
  14.  while (k!=string::npos)
  15. {
  16. s1=str.substr(pos,k-pos);
  17. s2=str.substr(k+1,k2-(k+1));
  18. s.append(s2);
  19. s.append(s1);
  20. str.erase(k2-pos,pos);
  21. if (ispunct(str[k]))        
  22.  pos=k+2;                    
  23.  else pos=k+1;  
  24.  s1.erase(k,pos);
  25.  s2.erase(k2,pos);  
  26. k=str.find_first_of(razdel,pos);
  27. k2=str.find_first_of(razdel,k+1);
  28.  
  29. }
  30. cout<<s<<"\t";
  31.      
  32.      cin.get();
  33.      cin.get();
  34.      return 0;}
  35.  




программа компилируется,но как только я ввожу исходную строку и нажимаю enter ,программа прекращает работу.

 Профиль  
                  
 
 Re: C++ строки
Сообщение27.05.2012, 22:02 
Админ форума
Аватара пользователя


19/03/10
8952
 i  killeraleksana, при размещении исходного кода пользуйтесь, пожалуйста, тегом syntax (Как подсвечивать синтаксис).
Поправил.

 Профиль  
                  
 
 Re: C++ строки
Сообщение04.06.2012, 19:31 


13/05/12
48
RF
Я не программист, но мне кажется у Вас выскакивает исключение (не спрашивайте лично меня какое) из-за ошибок при вызове операций со строками. Так в строке 16 у вас вырезается от большей к меньшей (поменяйте символы местами).
Затем не удаляйте s1 и s2 в цикле, они в начале цикла явно определяются (может тоже возникнуть ошибка, если будут "косяки" с позициями удаления).
И вообще, IMHO, не удаляйте исходную строку, т.к. при полном удалении строки тоже может быть исключение (ошибка).
Не забывайте учитывать разделители слов (пробелы и т.п.) при копировании (или, брр, удалении).
И что делать, если слов нечетное число или несколько пробелов?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group