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

Сложные строки! - C++

Восстановить пароль Регистрация
 
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
18.05.2011, 22:20     Сложные строки! #1
Написать программу, которая вводит текст, состоящий из нескольких предложений, и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.
вообще нет мыслей! так как то вести счет кавычек особенный не знаю как((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 22:20     Сложные строки!
Посмотрите здесь:

C++ Сложные проценты
C++ Сложные структуры
C++ Две не сложные задачки
C++ Не сложные задачи по с++
C++ Сложные действия со строками
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gellios
Сообщений: n/a
18.05.2011, 22:22     Сложные строки! #2
Циклом перебирать и выносить в отдельные строки, т.е. на первое вхождение кавычек и начинаешь вносить в новую строку до конца кавычек и т.д. и т.д.
VaLenOK007
 Аватар для VaLenOK007
4 / 4 / 3
Регистрация: 12.04.2011
Сообщений: 125
18.05.2011, 22:28     Сложные строки! #3
Ну вроде не так сложно

Экранируем ввод текста, создаем цикл, который просматривает "". и потом от " до " выводит символы между ними. Вроде как с числами, типа вывести числа на отрезке от a до b
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
18.05.2011, 22:32     Сложные строки! #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
#include <boost/regex.hpp>
#include <string>
#include <list>
#include <iterator>
#include <algorithm>
#include <boost/lexical_cast.hpp>
 
int main()
{
   std::list<std::string> values;
   std::string stroka = "Лермонтов \"Герой нашего времени\". Булгаков \"Мастер и Маргарита\"";
   boost::regex xRegEx("(\"(.*?)\")");
   boost::smatch xResults;
   
   std::string::const_iterator xItStart = stroka .begin();
   std::string::const_iterator xItEnd = stroka .end();
   
   while( boost::regex_search(xItStart, xItEnd, xResults, xRegEx) )
   {
      values.push_back(std::string(xResults[2]));
      xItStart = xResults[1].second;
   }
   std::copy(values.begin(), values.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
18.05.2011, 22:41  [ТС]     Сложные строки! #5
for(int i=0;i<=dlina_stroki; i++)
if (str1[i]=='"' то что????как написать: вывести пока не встретишь вторые кавычки???
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
18.05.2011, 22:45     Сложные строки! #6
C++
1
2
3
4
5
6
7
8
9
10
bool open=false;
for(int i=0;i<=dlina_stroki; i++)
{
   if (str1[i]=='"')
   { 
      open=!open;
      if(!open) //если кавычки закрылись
            <действия>
   }
}
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
18.05.2011, 22:52  [ТС]     Сложные строки! #7
не понятно...мне вообще си не понятен, ну так что означает 1 и 6 строчка..и что эт такое за open(((простите за тупость
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
18.05.2011, 22:55     Сложные строки! #8
open - переменная булева типа
1 строчка - создать переменную и присвоить ей ложь
6 строчка - инвертировать переменную: если она ложь, то станет истина, и наоборот
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
18.05.2011, 23:11  [ТС]     Сложные строки! #9
а как он будет находить именно закрывающие кавычки???
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
18.05.2011, 23:28     Сложные строки! #10
Когда первая кавычка, open = true. Когда вторая open = false, третья open = true, четвертая open = false и т.д.. Т.е. открывающая open = true, закрывающая open = false.
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
19.05.2011, 00:13  [ТС]     Сложные строки! #11
а можете не програму написать?((
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.05.2011, 00:35     Сложные строки! #12
Цитата Сообщение от LenaLitvinova Посмотреть сообщение
а можете не програму написать?
Вот Вам непрограмма
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
    
int main(void){
    char buf[BUFSIZ], out[BUFSIZ], * pOpen, * pClose;
    
    while ( printf("Text: ") && scanf("%[^\n]%*c", buf) == 1 ){
        printf("Qouted text:\n");
        for ( pOpen = buf; ( pOpen = strchr(pOpen, '"') ) && ( pClose = strchr(pOpen + 1, '"') ); pOpen = pClose + 1 ){
            strncpy(out, pOpen, pClose - pOpen + 1);
            out[pClose - pOpen + 1] = 0;
            printf("%s\n", out);
        }
        if ( ! pClose )
            fprintf(stderr, "WARNING: opening qoute without closing.\n");
    }
    
    return 0;
}
LenaLitvinova
3 / 3 / 1
Регистрация: 06.12.2010
Сообщений: 70
19.05.2011, 00:53  [ТС]     Сложные строки! #13
только: scanf("%[^\n]%*c", buf) == 1-поясните
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2011, 00:57     Сложные строки!
Еще ссылки по теме:

Помогите пожалуйста написать не сложные программы на Си++ C++
Не сложные преобразования массива C++
DEV-C++. Сложные проценты по вкладу C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.05.2011, 00:57     Сложные строки! #14
Цитата Сообщение от LenaLitvinova Посмотреть сообщение
scanf("%[^\n]%*c", buf) == 1
Помещает текст из потока ввода в буфер buf, игнорирует символ перевода строки. Если просто нажать enter, в буфер ничего не попадёт, scanf() вернёт 0 и цикл прервётся.
Yandex
Объявления
19.05.2011, 00:57     Сложные строки!
Ответ Создать тему
Опции темы

Текущее время: 05:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru