2014 dxdy logo

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

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




 
 C++ строки
Сообщение27.05.2012, 17:32 
Доброго времени суток. :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 
Аватара пользователя
 i  killeraleksana, при размещении исходного кода пользуйтесь, пожалуйста, тегом syntax (Как подсвечивать синтаксис).
Поправил.

 
 
 
 Re: C++ строки
Сообщение04.06.2012, 19:31 
Я не программист, но мне кажется у Вас выскакивает исключение (не спрашивайте лично меня какое) из-за ошибок при вызове операций со строками. Так в строке 16 у вас вырезается от большей к меньшей (поменяйте символы местами).
Затем не удаляйте s1 и s2 в цикле, они в начале цикла явно определяются (может тоже возникнуть ошибка, если будут "косяки" с позициями удаления).
И вообще, IMHO, не удаляйте исходную строку, т.к. при полном удалении строки тоже может быть исключение (ошибка).
Не забывайте учитывать разделители слов (пробелы и т.п.) при копировании (или, брр, удалении).
И что делать, если слов нечетное число или несколько пробелов?

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group