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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fox_s
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 6
#1

В каждой второй строке удалить третье слово, если такое есть - C++

25.01.2014, 18:34. Просмотров 584. Ответов 5
Метки нет (Все метки)

Добрый день! Ребята срочно нужна помощь,буду признателен,нужно в С++ разработать программу следующего условия:

В каждой второй строке надо удалить третье слово, если такое есть,
при этом количество пробелов в строке не должно измениться.
Остальные строки не меняются.

Заранее благодарен, Борис!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 18:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В каждой второй строке удалить третье слово, если такое есть (C++):

Найти слово "ТЕКСТ", если такое слово есть,то отпечатать его номер в строке. - C++
В символьной строке, содержащей не более 80 символов, каждые два соседних слова разделены одним пробелом, строка заканчивается символом...

Скопировать содержимое текстового файла, удалив в каждой строке слово номер N+1, если в слове N есть 4 - C++
Здравствуйте. Помогите, пожалуйста, в написании программы Скопировать содержимое текстового файла, удалив в каждой строке слово номер...

Если на k-й символ попадает слово, то оно относится ко второй строке - C++
Само задание нужно разбить исходную строку на две подстроки , причём первая длинной k. Если на к-й символ попадает слово, то его следует...

В каждой строке удалить второе слово - C++
Ребята, нужна помощь. Нужно иметь N-ое кол-во строк и вводить это кол-во с клавиатуры, но не больше 20. Дальше вводим каждую строку, позже...

В предложении удалить первое вхождение “w”, если такое есть - C++
Как можно выполнить это задание с помощью строк?? В предложении удалить первое вхождение “w”, если такое есть. Образовавшуюся “дыру”...

В каждой строке файла удалить среднее слово - C++
В каждой строке файла удалить среднее слово, результат записать в файл Например, в строке 7 слов - удалить 4 слово Если 6 слов, то...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
26.01.2014, 01:56 #2
Легко решить можно с помощью регурярных выражений и boost. Например, удаление 3 слова в строке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>
 
int main()
{
   std::string str = "first second third fourth ";
 
   const boost::regex reg("\\s*(\\<.*?\\>\\s+){2}(\\<.*?\\>)");
   boost::smatch match;
   if (boost::regex_search(str.cbegin(), str.cend(), match, reg))
   {
      //for (auto& i : match) std::cout << i << "\n";
      if (match.size() == 3)
         boost::algorithm::erase_first(str, match[2].str());
   }
   std::cout << str << "\n";
 
   return 0;
}
Это не сложно будет переделать под решение полной задачи, - нужно будет всего лиши разбить требуемый текст на строки и пройтись по нему в цикле работая с каждым третим элементом. А без буста все это писать надо будет очень долго и нудно.

Не по теме:

Кликните здесь для просмотра всего текста
Вопрос не по теме, по регулярному выражению - почему данный ниже код бросает иключение? - хотел сделать lookbehind (?<=) в регулярке, что то типа этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <boost/algorithm/string/regex.hpp>
#include <boost/regex.hpp>
 
int main()
{
   std::string str = "first second third fourth ";
 
   const boost::regex reg("(?<=\\s*(\\<.*?\\>\\s+){2})(\\<.*?\\>)");
   boost::algorithm::erase_regex(str, reg);
   std::cout << str << "\n";
 
   return 0;
}

0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.01.2014, 13:00 #3
Цитата Сообщение от DiffEreD Посмотреть сообщение
Это не сложно будет переделать под решение полной задачи, - нужно будет всего лиши разбить требуемый текст на строки и пройтись по нему в цикле работая с каждым третим элементом. А без буста все это писать надо будет очень долго и нудно.
Буст устанавливать компилировать нада, лучше из stl <regex> использовать никакой либы подключать не нужно заголовок добавил #include <regex> и все юзай РВ. С помощью <regex> за 5 минут делается.

Добавлено через 2 минуты
А от рв что б на предложения разбить примерно такое"(?:\\s|[^\\.!\\?])+?\\.|!|\\?"
0
KOPOJI
26.01.2014, 13:01
  #4

Не по теме:

Цитата Сообщение от DiffEreD Посмотреть сообщение
Вопрос не по теме
заглядывать назад в PCRE позволяется только на определенное количество символов, а \s* и т.д. - неопределенное.

1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.01.2014, 13:11 #5
Цитата Сообщение от KOPOJI Посмотреть сообщение
заглядывать назад в PCRE позволяется только на определенное количество символов, а \s* и т.д. - неопределенное.
а в <regex> РВ не PCRE, а ECMAscript РВ (javascript РВ).
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16698 / 6624 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
26.01.2014, 13:31 #6
ninja2, PCRE = Perl-Compatible Regular Expressions. Перевод нужен, или достаточно? У него boost. Ну и, если уж так хочется что-нибудь написать - то можно сначала полистать мануал
http://www.boost.org/doc/libs/1_55_0...ex/syntax.html
There are three main syntax options available, depending upon how you construct the regular expression object:
Perl (this is the default behavior).
POSIX extended (including the egrep and awk variations).
POSIX Basic (including the grep and emacs variations).
Добавлено через 6 минут
ninja2, и да, в дополнение, по поводу ECMAScript http://www.ecma-international.org/ec...5.1/#sec-15.10
A RegExp object contains a regular expression and the associated flags.

NOTE The form and functionality of regular expressions is modelled after the regular expression facility in the Perl 5 programming language.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 13:31
Привет! Вот еще темы с ответами:

В каждой строке текста удалить второе слово - C++
Привет всем, у меня вопрос. Нужно ввести 20 строк из 128 символов (максимум, неважно какое кол-во символов), но в каждой строке нужно...

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его - C++
Дана строка, в котором есть слово &quot;да&quot; или слово &quot;нет&quot;. Если в нем есть слово &quot;нет&quot;, то удалить его или получить строку в слова &quot;да&quot; и...

Удалить в каждой строке текстового файла последнее слово - C++
Выполнить обработку текстового файла. Определить кол-во предложений в исходном тексте.как реализовать ?Удалить в каждой строке последнее...

Как из первой строки удалить те буквы, которые есть во второй строке? - C++
Как из первой строки удалить те буквы, которые есть во второй строке???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.01.2014, 13:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru