Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переставить местами слова в файле 
:(
    Опции темы
iPlay
Дата 18.4.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Помогите плиз. Как сделать так чтобы в считанной из файла строке менялось местами 1е и 2е слово 3е и 4е ну и т.д.??
PM MAIL   Вверх
Earnest
Дата 18.4.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Разбить строку на слова, поместить их в массив, поменять, снова собрать строку.


--------------------
...
PM   Вверх
Rififi
Дата 18.4.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



iPlay

с использованием STL - так:

Код
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>

std::string swap_words(const std::string& s)
{
    std::stringstream ss(s);
    typedef std::vector<std::string> V;
    V v;

    std::copy(
        std::istream_iterator<std::string>(ss),
        std::istream_iterator<std::string>(),
        std::back_inserter(v));
    if (v.size() & 1)
        throw std::exception("Нечетное количество слов");
    for(size_t i=0; i <= v.size()/2; i += 2)
        std::swap(v[i], v[i+1]);
    ss.clear();
    std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(ss, " "));
    return ss.str();
}

PM MAIL   Вверх
iPlay
Дата 18.4.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



За код конечно спасибо. Но я буду в UNIX программу встраивать перестановку. Щас пробую сам сделать.
PM MAIL   Вверх
Rififi
Дата 18.4.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



iPlay
Цитата
в UNIX

да хоть в X-System LW-42/G
PM MAIL   Вверх
iPlay
Дата 18.4.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



а STL разве под UNIX будет работать?

Добавлено через 2 минуты и 51 секунду
Я просто с STL не работал как этот код применить правильно в UNIX программе?
PM MAIL   Вверх
warmonger_
Дата 18.4.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



Цитата(iPlay @  18.4.2008,  20:34 Найти цитируемый пост)
а STL разве под UNIX будет работать?

да

Цитата(iPlay @  18.4.2008,  20:34 Найти цитируемый пост)
как этот код применить правильно в UNIX программе? 

хм... попробуй просто его написать
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
vinter
Дата 18.4.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



iPlay, чистый С++ платформонезависим, а STL это его часть.


--------------------
Мой блог
PM MAIL WWW   Вверх
warmonger_
Дата 18.4.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



Цитата(vinter @  18.4.2008,  22:32 Найти цитируемый пост)
чистый С++ платформонезависим

сильно громко сказано... smile 
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
iPlay
Дата 19.4.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Спасибо, просветили насчет STL, незнал .А можно в кратце как работает тот код а то не все понятно.
PM MAIL   Вверх
Rififi
Дата 19.4.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



iPlay
код - практически дословная реализация того, что предложил Earnest

алгоритм copy разбивает строку на слова, используя пробельные символы в качестве разделителя. чтобы читать из стрима, применяется специальный адаптер "псевдо-итератора".
цикл for - собственно сама перестановка элементов.
далее снова применяется алгоритм copy, только уже для того, чтобы собрать строку из перестановленных слов. ostream_iterator принимает на вход ссылку на поток для сохранения результата и разделитель. потом возвращается собранная строка. всё.
PM MAIL   Вверх
iPlay
Дата 22.4.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



И последний вопрос уже в самом применнении чёто я не шарю как вызвать ту ф-цию что на STL написана 
вот кусок кода что я пишу логика простая читаем из канала "client-server" в буфер buff :

Код

int main(){    
   char buff[2048];
   int fr;    
   int fw;
   fr = open("client-server",O_RDONLY);
   mkfifo("server-client",0777);
   fw = open("server-client",O_WRONLY);
   read(fr,buff,sizeof(buff));
   //вот тут надо вызвать обработку я незнаю как?!  
    .
    . 
    .
}



PM MAIL   Вверх
Alek86
Дата 22.4.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(warmonger_ @  18.4.2008,  23:38 Найти цитируемый пост)
сильно громко сказано...

в самый раз
ты бы видел на форумах споры насчет работы на C++ на платформах, где у разных типов указатели разного размера smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
iPlay
Дата 22.4.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Это да smile. Тока как мне быть писать заново чтоли обработку на чистом С?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.