С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
Kallipso
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
1

Считать с клавиатуры текст и вывести на экран только предложения, состоящие из заданного количества слов

19.03.2012, 15:37. Просмотров 2921. Ответов 8
Метки нет (Все метки)

помогите написать прогу на С++
1) Написать программу, которая считывает с клавиатуры текст и выводит на экран только предложения, состоящие из заданного количества слов.
2) Ввести с клавиатуры слово и символ «А». Удалить в слове первый по порядку символ «А» и присоединить символ «А» к началу полученного слова. Если в слове нет символа «А», то выдать соответствующее текстовое сообщение и присоединить символ «А» к началу слова. Вывести слово и символ.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 15:37
Ответы с готовыми решениями:

Считать текст из файла и вывести только предложения, состоящие из заданного количества слов
Написать программу, которая считывает текст из файла и выводит на экран только...

Вывести на экран из текста только предложения, состоящие из заданного количества слов
Помогите решить задачку: Вывести на экран из текста только предложения,...

Строка: Вывести на экран только предложения, состоящие из заданного количества слов.
Написать программу, которая считывает текст из файла и выводит на экран только...

Задача на тему "Строки" (вывести на экран только предложения, состоящие из заданного количества слов)
написать программу, которая считывает текст из файла и вывыдит на экран...

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

8
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.03.2012, 16:35 2
Лучший ответ Сообщение было отмечено как решение

Решение

1.
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
27
28
29
30
#include <iostream>
#include <boost/algorithm/string.hpp>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
   std::string s = "Hello and what. Is it now true? Such good thing! What is it?!";
   const size_t words_count = 3;
   const std::string sent_delims = ".?!";
   const std::string word_delims = " ,:";
   std::vector<std::string> sentences;
   boost::split(sentences, s, boost::is_any_of(sent_delims), boost::token_compress_on);
   std::transform(sentences.begin(), sentences.end(), sentences.begin(), [](const std::string& val)
   {
      return boost::trim_copy(val);
   });
   std::vector<std::string> right_sentences;
   std::copy_if(sentences.begin(), sentences.end(), std::back_inserter(right_sentences),
   [words_count, word_delims](const std::string& value) -> bool
   {
      std::vector<std::string> words;
      boost::split(words, value, boost::is_any_of(word_delims), boost::token_compress_on);
      return words.size() == words_count;
   });
   std::copy(right_sentences.begin(), right_sentences.end(), 
   std::ostream_iterator<std::string>(std::cout, "\n"));
}
http://liveworkspace.org/code/6598b983d5953d6600ab39694b20482e

Добавлено через 4 минуты
2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
   std::string s = "Hello and what. Is it now true? Such good thing! What is it?!";
   char symbol = 'T';
   std::string::iterator iter = std::find(s.begin(), s.end(), symbol);
   if (iter == s.end())
   {
      std::cout << "No symbol " << symbol << " in string." << std::endl;
   }
   else
   {
      s.erase(iter);
   }
   s.insert(s.begin(), 1, symbol);
   std::cout << "string: " << s << " symbol: " << symbol << std::endl;
}
http://liveworkspace.org/code/d06361e1f586f1353909ba213f3a6cfb
1
Kallipso
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
19.03.2012, 16:44  [ТС] 3
большое спасибо
а можно первую проще написать?
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.03.2012, 16:51 4
Лучший ответ Сообщение было отмечено как решение

Решение

Kallipso, Она просто написана. При определенных знаниях.

А так...
Ну нужна функция парсинга.
Функция удаления лишних пробелов.

Впринципе все. Остальное можно реализовать через циклы. Но мне это, извините, делать лень.
1
Kallipso
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
19.03.2012, 21:02  [ТС] 5
и за это спасибо

Добавлено через 4 часа 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение

у меня не работает из-за #include <boost/algorithm/string.hpp>
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.03.2012, 23:43 6
Kallipso, Буст поставить нужно. Или реализовать split стандартными средствами. К примеру через stringstream.
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
20.03.2012, 00:32 7
Цитата Сообщение от Kallipso Посмотреть сообщение
а можно первую проще написать?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
using namespace std;
 
struct Sent{
int count;
int pos;
Sent():count(0),pos(0){
}
};
 
int main(){
    Sent sent[20];
    int val = 0;
char text[] ="Spring is green. Summer is brigth. Autumn now. August." ;
 
size_t i = 0;
size_t j = 0;
size_t n = 0;
size_t k = 0;
bool loop = false;
cout << "How much words?:   ";
cin >> val;
    while(text[i]){
    if(isalpha(text[i])&&!isalpha(text[i + 1])){
        sent[j].count++;
    
    }
        if(text[i] == '.'){
            sent[j].pos = i;
            j++;}
        
    i++;}
j = 0;
i = 0;
     while(text[i]) {   
        
         if( text[i] == '.'&& sent[j].count == val && sent[j].pos == i) {   
             for (k = n; k <= i; k++) cout <<  text[k];
             n = i + 1;loop = true;
         }
        
         if( text[i] == '.'&& sent[j].count != val )  {   
             
             n = i + 2;
         }
            
          if( text[i] == '.') j++;
 
          i ++;
     }
     if(!loop) cout << "Not found";
     cout << endl;
system("pause");
}
Добавлено через 14 минут
Строка 45 опечатка
C++
1
n = i + 2;
Нужно
C++
1
n = i + 1;
1
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
13.04.2012, 17:29 8
есть ли кодировка в Java первой задачки?
0
Pollik
0 / 0 / 0
Регистрация: 01.10.2017
Сообщений: 11
10.03.2018, 21:06 9
Скажите пожалуйста,вы можете объяснить каждый пункт этой программы?Что тут делает каждая функция,а то не понятно немного
0
10.03.2018, 21:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2018, 21:06

Потоки.Программа выводит на экран только предложения, состоящие из заданного количества слов. Нужно дополнить прогу
вот что нужно написать, чтобы выводило правильно. везде (в интернете) очень...

Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного колличества слов
Задание выглядит следующим образом: &quot;Написать программу, которая считывает...

Написать программу, которая считывает текст с клавиатуры и выводит на экран только слова состоящие из заданного количества букв
Написать программу, которая считывает текст с клавиатуры и выводит на экран...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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