Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 12:37   #1
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию Программа на C++!!!

поменять местами слова: первое и последнее, второе и предпоследнее и т. д. Если слов не четное количество то удалить слово по центру. Считывать с клавиатуры 30 первых символов и не считывать после точки.
Вот мои наброски, здесь я только меняю местами слова.
Код:
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <vector>
#include<conio.h>
#include<stdio.h>
using namespace std; 
int main(){
    
  const std::string delims(",.?!:;");
  std::string str, tail;
  getline(std::cin, str);
  for(size_t i = 0; i < str.length(); ++i)
    ( delims.find(str[i]) != std::string::npos )? str[i] = ' ' : 0;
  std::vector<std::string> vec;
  std::istringstream ist(str);
  while(ist >> tail)
    vec.push_back(tail);
  std::vector<std::string>::iterator it_b = vec.begin(), it_e = vec.end() - 1;
  for(size_t i = 0; i < vec.size() / 2; ++i)
    std::swap(*it_b++, *it_e--);
  for(size_t i = 0; i < vec.size(); ++i)
    std::cout << vec[i] << ' ';
   getch();
 return (0);
 }

Последний раз редактировалось DeCIIoT; 24.03.2013 в 14:32.
DeCIIoT вне форума Ответить с цитированием
Старый 24.03.2013, 13:27   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Пожалуйста выделите код тегами. #
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.03.2013, 13:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и? Практически задача решена получается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 13:44   #4
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию

я не знаю как сделать чтоб программа слово по центру находила и удаляла.
DeCIIoT вне форума Ответить с цитированием
Старый 24.03.2013, 14:16   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://liveworkspace.org/code/2eehMb$9

Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

struct FindSpace
{
    FindSpace(const char spc, const bool nSpace):needSpace(nSpace),space(spc){}
    bool operator()(const char ch)const
    {
        return (needSpace)? ch==space: ch!=space;
    }
    bool needSpace;
    char space;
};

std::vector<std::string> GetWords(const std::string& src, const char space=' ')
{
   std::vector<std::string> result;
   std::string::const_iterator beg = src.begin();
   std::string::const_iterator cur = std::find_if(beg, src.end(), FindSpace(space,false));
   if(cur==src.end()) return result;

   beg = cur;
   while(true)
   {
       cur = std::find_if(beg, src.end(), FindSpace(space,true) );
       const std::string findWord(beg, cur);
       result.push_back(findWord);
       if(cur==src.end()) break;
       beg = cur+1;
       cur = std::find_if(beg, src.end(), FindSpace(space, false) );
       if(cur==src.end()) break;
       beg=cur;
   }
   return result;
}

std::string GetTransform(const std::vector<std::string>& src, const char space=' ')
{
    std::string result;
    const size_t size = src.size();
    for(int n=size-1;n>0;--n)
    {
        result +=src[n];
        result +=space;
    }
    result +=src[0];
    return result;
}



int main()
{
    const std::string src = "  word1 word2 word_center wird3  word4 ";
    std::cout<< "SOURCE STRING: "<<src<<'\n';
    
    std::vector<std::string> result = GetWords(src);
    const size_t size=result.size();

    if(size==0) std::cout<< "RESULT: text does not contain the words\n";
    else
    {
        std::cout <<"WORDS:\n";
        for(size_t n=0;n<size;++n) std::cout<< n+1<<") "<<result[n]<<std::endl;

        if(size%2!=0)
        {
            const size_t pos_center = size/2;
            std::cout<<"DELETE: remove the central word: "<<result[pos_center]<<'\n';
            result.erase(result.begin()+pos_center);
        }
        std::cout <<"RESULTAT: "<< GetTransform(result)<<'\n';
    }
    return 0;
}
_Bers вне форума Ответить с цитированием
Старый 24.03.2013, 14:21   #6
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию

а как сделать чтоб самому с клавиатуры вводить и чтоб читало только 30 первых символов?

Последний раз редактировалось DeCIIoT; 24.03.2013 в 14:28.
DeCIIoT вне форума Ответить с цитированием
Старый 24.03.2013, 14:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Создать правильный проект консоли для твоего компилятора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2013, 14:33   #8
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию

спасибо огромное.
DeCIIoT вне форума Ответить с цитированием
Старый 24.03.2013, 14:47   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2DeCIIoT
Код:
#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
	string str;
	getline(cin, str);

	vector<string> words, reverse_words;
	stringstream ss(str);
	copy(istream_iterator<string>(ss), istream_iterator<string>(), back_inserter(words));

	if (words.size() % 2 != 0)
		words.erase(words.begin() + words.size() / 2);

	reverse_words.insert(reverse_words.end(), words.rbegin(), words.rbegin() + words.size() / 2);
	reverse_words.insert(reverse_words.end(), words.rbegin() + words.size() / 2, words.rend());

	copy(reverse_words.begin(), reverse_words.end(), ostream_iterator<string>(cout, " "));

	return 0;
}
пс. тупанул слегка, задача ведь сводится к обычному выводу слов в обратном порядке. т.е можно еще проще
Код:
#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
	string str;
	getline(cin, str);

	vector<string> words;
	stringstream ss(str);
	copy(istream_iterator<string>(ss), istream_iterator<string>(), back_inserter(words));

	if (words.size() % 2 != 0)
		words.erase(words.begin() + words.size() / 2);

	copy(words.rbegin(), words.rend(), ostream_iterator<string>(cout, " "));

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 24.03.2013 в 15:30.
pproger вне форума Ответить с цитированием
Старый 24.03.2013, 14:52   #10
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию

спасибо.
а как сделать чтоб 30 первых символов считывало, после точки прекращало читать предложение и символы не должно читать как слова. помоги пожалуйста.

Последний раз редактировалось DeCIIoT; 24.03.2013 в 14:55.
DeCIIoT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел Yegorka Lazarus, Free Pascal, CodeTyphon 13 20.12.2012 18:02
Программа как программа. вопрос leonidsm Общие вопросы C/C++ 5 02.10.2012 21:30
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09