Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
#1

Напечатать введенные предложения по возрастанию их длин

05.06.2016, 00:59. Просмотров 317. Ответов 14
Метки нет (Все метки)

С клавиатуры вводится текст из строчных латинских букв. Текст состоит из
нескольких предложений, каждое из которых заканчивается точкой. Ввод
прекращается при нажатии клавиши Enter. Напечатать введенные предложения по возрастанию их длин.
C++
1
2
3
4
5
6
7
8
int main()
{
    setlocale(LC_ALL, "Russian");
    string st = "D vcbc avxs. Bdcjb. Hkmebfc bhb.";
    cout << endl << "Текст: " << st << endl;
    cout << endl;
.......
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 00:59
Ответы с готовыми решениями:

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

Вывести введенные числа по возрастанию
Здравствуйте помогите написать програму чтобы выводила 5 введеных чисел по...

Отсортировать введенные числа по возрастанию и по убыванию
Здраствуйте. Задание Пользователь вводит 10 чисел, отсортировать и вывести на...

Отсортировать по возрастанию и по убыванию введенные числа
Здраствуйте. Пользователь вводит 10 чисел, отсортировать ихпо возростанию и по...

Сортировка слов в строке по возрастанию их длин
Всем привет. Вобщем такое дело. Программа сортирует слова по убыванию длины в...

14
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 09:04 #2
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
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
 
 
int main()
{
 char str[256];
char **arr;
  gets(str);
  char buf[256];
  strcpy(buf,str);
  char * pch = strtok (str,".");
int n=0;
  while (pch != NULL)
  {
      n++;
      pch = strtok (NULL, ".");
  }
 
  arr=new char*[n];
  int i=0;
   char * p = strtok (buf,".");
  while (p!= NULL)
  {
       arr[i]=new char[256];
     arr[i]=p;
      p = strtok (NULL, ".");
      i++;
  }
  char *temp=new char[256];
  for(int y=0;y<n;y++)
  for(int j=0;j<n;j++)
  {
      if(strlen(arr[y])<strlen(arr[j]))
      {
          temp=arr[j];
          arr[j]=arr[y];
          arr[y]=temp;
      }
  }
 
   for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
return 0;
 
}
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 11:12  [ТС] #3
Выдаёт ошибку: [B]error C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Полностью задание: С клавиатуры вводится текст из строчных латинских букв. Текст состоит из нескольких предложений, каждое из которых заканчивается точкой. Ввод прекращается при нажатии клавиши Enter. Произвести следующие операции:
1) вывести измененный текст, каждое предложение которого начинается с заглавной буквы;
2) напечатать введенные предложения по возрастанию их длин.

Для первого задания "приблизительный" код такой:
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 "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string st = "nmdffvk bwgcj wjk. bhjvbc bx. bcheo jwdoh wws.";
    cout << endl << "Текст: " << st << endl;
    cout << endl;
    cout << "Длина текста: " << st.size() << endl;
    cout << endl;
    for (int i = 0; i <= st.size(); i++)
    {
        st[i] = tolower(st[i]);
    }
    for (int i = 0; i <= st.size(); i++)
    {
        if (st[i] == '.')
            st[i + 2] = toupper(st[i + 2]);
    }
    st[0] = tolower(st[0]);
 
    cout << endl << "Текст_: " << st << endl;
    getchar();
}
Его необходимо дописать,чтобы выполнялось второе задание с учетом первого
0
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 15:07 #4
Компилятор пишет что использование функции gets может быть небезопасно и советует использовать более безопасный аналог gets_s.Можно либо заменить gets на gets_s либо отключить в настройках подобные предупреждения.Дополнил код чтобы выполнялся первый пункт.
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>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
 
 
int main()
{
 char str[256];
char **arr;
  gets_s(str);
  char buf[256];
  strcpy(buf,str);
  char * pch = strtok (str,".");
int n=0;
  while (pch != NULL)
  {
      n++;
      pch = strtok (NULL, ".");
  }
 
  arr=new char*[n];
  int i=0;
   char * p = strtok (buf,".");
  while (p!= NULL)
  {
       arr[i]=new char[256];
     arr[i]=p;
     arr[i][0]=(char)toupper(arr[i][0]);
      p = strtok (NULL, ".");
      i++;
  }
  for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
 
  char *temp=new char[256];
  for(int y=0;y<n;y++)
  for(int j=0;j<n;j++)
  {
      if(strlen(arr[y])<strlen(arr[j]))
      {
          temp=arr[j];
          arr[j]=arr[y];
          arr[y]=temp;
      }
  }
cout << "Otsortirovanniy text:" << endl;
   for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
return 0;
 
}
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 17:59  [ТС] #5
При компиляции возникает ошибка error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Исправила на strcpy_s, далее возникает такая же ошибка на strtok, исправила на strtok_s, далее снова ошибки - не верное кол-во аргументов в функции strtok...
Операции 1) и 2) выполняются отдельными функциями
0
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 18:34 #6
Лучше отключи предупреждение и используй старые функции.
C++
1
#define _CRT_SECURE_NO_WARNINGS
пишешь в самом начале, до всех #include

Добавлено через 10 минут
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
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
void ToUp(char **arr,int n)
{
    for(int j=0;j<n;j++)
  arr[j][0]=(char)toupper(arr[j][0]);
}
void Sort(char **arr,int n)
{
  char *temp=new char[256];
     for(int y=0;y<n;y++)
  for(int j=y+1;j<n;j++)
  {
      if(strlen(arr[y])>strlen(arr[j]))
      {
          temp=arr[j];
          arr[j]=arr[y];
          arr[y]=temp;
      }
  }
}
 
int main()
{
 char str[256];
char **arr;
  gets(str);
  char buf[256];
  strcpy(buf,str);
  char * pch = strtok (str,".");
int n=0;
  while (pch != NULL)
  {
      n++;
      pch = strtok (NULL, ".");
  }
 
  arr=new char*[n];
  int i=0;
   char * p = strtok (buf,".");
  while (p!= NULL)
  {
       arr[i]=new char[256];
     arr[i]=p;
      p = strtok (NULL, ".");
      i++;
  }
  ToUp(arr,n);
  for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
 
 
  Sort(arr,n);
 
cout << "Otsortirovanniy text:" << endl;
   for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
return 0;
 
}
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 19:05  [ТС] #7
Не подскажите, как отключить предупреждения в Visual Studio 2013?
0
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 19:20 #8
#define _CRT_SECURE_NO_WARNINGS
пишешь в самом начале, до всех #include
Не помогло?

Добавлено через 38 секунд
Вообще я codeblocks использую
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 19:49  [ТС] #9
Не помогло...
0
Миниатюры
Напечатать введенные предложения по возрастанию их длин  
Azazel-San
Mental handicap
123 / 123 / 65
Регистрация: 24.11.2015
Сообщений: 819
Завершенные тесты: 1
05.06.2016, 19:54 #10
Encephalopathy, замени на getline();
0
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 19:59 #11
Нужно отключить, в свойствах проекта, использование предкомпилированных заголовков.

Цитата Сообщение от Azazel-San Посмотреть сообщение
Encephalopathy, замени на getline();
Зачем?
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 20:41  [ТС] #12
Настройки изменила, работает. Только функция исправляет только первую букву на заглавную, а мне нужно, чтобы каждое предложение начиналось с заглавной буквы. Например, текст имеет такой вид: dbvnrj xdh. dhcdb sbsjfrb fd. jhsv. Результат должен быть таким: ....1 функция....Dbvnrj xdh. Dhcdb bsjfrb fd. Jhsv.
....2 функция....Jhsv. Dbvnrj xdh. Dhcdb bsjfrb fd.
0
Encephalopathy
69 / 69 / 56
Регистрация: 04.06.2016
Сообщений: 235
Завершенные тесты: 2
05.06.2016, 21:13 #13
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
void ToUp(char **arr,int n)
{
    for(int j=0;j<n;j++)
    {
        for(int i=0;i<256;i++)
        {
        if(arr[j][i]!=' ')
        {
  arr[j][i]=(char)toupper(arr[j][i]);
  break;
        }
        }
    }
}
void Sort(char **arr,int n)
{
  char *temp=new char[256];
     for(int y=0;y<n;y++)
  for(int j=y+1;j<n;j++)
  {
      if(strlen(arr[y])>strlen(arr[j]))
      {
          temp=arr[j];
          arr[j]=arr[y];
          arr[y]=temp;
      }
  }
}
 
int main()
{
 char str[256];
char **arr;
  gets(str);
  char buf[256];
  strcpy(buf,str);
  char * pch = strtok (str,".");
int n=0;
  while (pch != NULL)
  {
      n++;
      pch = strtok (NULL, ".");
  }
 
  arr=new char*[n];
  int i=0;
   char * p = strtok (buf,".");
  while (p!= NULL)
  {
       arr[i]=new char[256];
     arr[i]=p;
      p = strtok (NULL, ".");
      i++;
  }
  ToUp(arr,n);
  for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
 
 
  Sort(arr,n);
 
cout << "Otsortirovanniy text:" << endl;
   for(int j=0;j<n;j++)
  cout << arr[j] <<"\n";
return 0;
 
}
0
Novichok2016
0 / 0 / 0
Регистрация: 02.06.2016
Сообщений: 26
05.06.2016, 23:45  [ТС] #14
А "." можно сохранить выводе предложений?

Добавлено через 1 час 56 минут
разобралась, большое спасибо!
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
06.06.2016, 09:28 #15
Encephalopathy, такую строчку
......... aa bb cc dd . . . ee ff gg . ... . hh ii
не очень красиво обрабатывает. И почему предложения печатаются без точек?
Вот эта программа справляется:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
///////////////////////////////////////////////////////////////////////////////
//С клавиатуры вводится текст из строчных латинских букв.
//Текст состоит из нескольких предложений, каждое из которых
//заканчивается точкой. Ввод прекращается при нажатии клавиши Enter.
//Произвести следующие операции:
//1) вывести измененный текст, каждое предложение которого
//начинается с заглавной буквы;
//2) напечатать введенные предложения по возрастанию их длин.
///////////////////////////////////////////////////////////////////////////////
//Программа корректно приводит строку
//.........   aa      bb    cc   dd  . . .   ee   ff   gg  .  ...  . hh   ii
//к виду
//Hh ii.
//Ee ff gg.
//Aa bb cc dd.
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
const   char    POINT_SYMB{'.'};
///////////////////////////////////////////////////////////////////////////////
typedef std::string                         T_str;
typedef std::vector     < T_str         >   T_strings;
typedef std::vector     < T_strings     >   T_strings_list;
///////////////////////////////////////////////////////////////////////////////
T_strings   get_point_delimited_not_empty_substrings( T_str     const   &   text )
{
    std::istringstream  text_istr( text );
    T_str               sentence;
    T_strings           sentences;
 
    while   (
                getline (
                            text_istr,
                            sentence,
                            POINT_SYMB
                        )
            )
    {
        if  (
                !sentence.empty()
            )
        {
            sentences.push_back( sentence );
        }
    }//while
 
    return  sentences;
}
///////////////////////////////////////////////////////////////////////////////
T_strings   get_space_delimited_substrings( T_str   const   &   sentence )
{
    std::istringstream  sentence_istr( sentence );
    T_strings           sentence_words;
 
    std::copy
        (
            std::istream_iterator< T_str >  ( sentence_istr ),
            std::istream_iterator< T_str >  (),
            std::back_inserter              ( sentence_words )
        );
 
    return  sentence_words;
}
///////////////////////////////////////////////////////////////////////////////
T_strings_list  get_sentence_words_list_without_empty_elements
    (
        T_strings   const   &   sentences
    )
{
    T_strings_list  sentence_words_list;
 
    for( auto   const   &   sentence    :   sentences )
    {
        auto    sentence_words  =   get_space_delimited_substrings( sentence );
 
        if  (
                !sentence_words.empty()
            )
        {
            sentence_words_list.push_back( sentence_words );
        }
    }//for
 
    return  sentence_words_list;
}
///////////////////////////////////////////////////////////////////////////////
T_str   for_words_get_sentence_with_point( T_strings   const   &   sentence_words )
{
    std::ostringstream  sentence_sout;
 
    std::copy
        (
            sentence_words.begin            (),
            sentence_words.end              (),
            std::ostream_iterator< T_str >  ( sentence_sout, " " )
        );
 
    auto    sentence    =   sentence_sout.str();
 
    sentence.front()    =   toupper
                                (
                                    sentence.front()
                                );
 
    sentence.back()     =   POINT_SYMB;
    return  sentence;
}
///////////////////////////////////////////////////////////////////////////////
T_strings   get_sentences_with_points( T_strings_list  const   &   sentence_words_list )
{
    T_strings   sentences;
 
    std::transform
        (
            sentence_words_list.begin   (),
            sentence_words_list.end     (),
            std::back_inserter          ( sentences ),
            for_words_get_sentence_with_point
        );
 
    return  sentences;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::ios::sync_with_stdio(false);
    T_str   text;
    getline( std::cin,  text );
 
    auto    sentences_without_points
        =   get_point_delimited_not_empty_substrings( text );
 
    auto    sentence_words_list
        =   get_sentence_words_list_without_empty_elements( sentences_without_points );
 
    auto    sentences   =   get_sentences_with_points( sentence_words_list );
 
    std::sort
        (
            sentences.begin    (),
            sentences.end      (),
 
            []  (
                    auto    const   &   L,
                    auto    const   &   R
                )
            {
                return      L.size()
                        <   R.size();
            }
        );
 
    std::copy
        (
            sentences.begin                 (),
            sentences.end                   (),
            std::ostream_iterator< T_str >  ( std::cout,    "\n" )
        );
}
0
06.06.2016, 09:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2016, 09:28

Вывести слова по возрастанию или убыванию их длин
Ребят у меня большая просьба к вам. Я начинающий программист учусь на первом...

Упорядочить слова в предложении по возрастанию длин слов
Добрый вечер. Есть код на С++, необходимо реализовать дополнительное задание -...

Дано предложение. Напечатать все слова в порядке возрастания их длин
Нужно сделать без &quot;классов&quot;, а я знаю как делать только с классами. Помогите...


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

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

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