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

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

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

Вывести в алфавитном порядке последние слова всех предложений - C++

17.05.2011, 06:59. Просмотров 972. Ответов 6
Метки нет (Все метки)

Помогите, пожалуйста, исправить код, а то дуб дубом((Не могу никак дойти(
Дан текст, состоящий из N (2<=N<=10) строк с максимальной длиной 80 символов. Необходимо вывести в алфавитном порядке последние слова всех предложений. Считать, что текст написан синтаксически грамотно, в качестве знаков препинания используются точка и запятая, слова состоят только из букв, перенос слов по слогам отсутствует. Для выделения слов из строки создать пользовательскую функцию.

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
#include <vcl.h>
#pragma hdrstop
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
//---------------------------------------------------------------------------
 
#pragma argsused
 char slova(char str[], char **qq, int r)
{char *p;
int g=r;
p=strtok(str," !?,.");
while (p!=NULL)
{
 strcpy(qq[r],p);
r++;
p=strtok(NULL," !?,.");}
return r;}
 
int main(int argc, char* argv[])
{  int n,i,q=0,c=0,g=0,j=0; char *t,ff[80];
char str[10][80]={"I like to wearo high-heeledo shoesee, trousers oor jeans.",
                   "Aaaarrr ttttttr oot iyt tiropeweo!",
                   "Russia is very reach in oil, iron ore, natural gas, copper, nickel.",
                   "It is a wonderful sight you see our country from the plane.",
                   "Throughout its history the Zoo has had many well-known residents.",
                   "The lakes in Scotland are called locks.",
                   "Thames is busiest and most important river in Great Britain.",
                   "Although this vast collection was part of the Zoo's appeal.",
                   "These include species such as rudd, European eels, pink sea fans.",
                   "There is much rain and fog in autumn and in winter!"};
while((n<2)||(n>10))
{printf("Vvedite chislo strok ot 2 do 10:");
scanf("%d",&n);
printf("\n");}
 
printf("Dannie stroki:\n");
for (i = 0; i <n; i++)
{printf("%s\n",str[i]);
strcpy(ff,str[i]);
t=strtok(ff," !?,.");
while (t!=NULL)
{q++; t=strtok(NULL," ,.!?-");}
}
 
char **qq;
qq=(char**)calloc(q,sizeof(char*));
for (i = 0; i <n; i++)
{qq[i]=(char*)calloc(80,sizeof(char));}
 
int r=0;
for (i = 0; i <n; i++)
{
r=slova(str[i],qq,r);}
 
 char *p;
 p=(char*)calloc(n+1,sizeof(char));
 
 for (i = 0; i <r; i++)
  { c=strlen(str[i]);
  if (i==(c-1))
 { strcpy(qq[j],str[i]);
 }
  for (int g=0; g<(r-1); g++)
for (int j=g+1; j<r; j++)
 if (strcmpi(qq[g], qq[j])>0)
{
  strcpy(p,qq[g]);
  strcpy( qq[g], qq[j]);
  strcpy (qq[j], p);
}
 
printf("\n");
for (int g=0; g<r; g++)
printf("%s\n", qq[g]);
 
for (int i = 0; i<1000; i++)
free (qq[i]);
free (qq);
 
free (p);
 
 getchar();getchar();
    return 0;}
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2011, 06:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести в алфавитном порядке последние слова всех предложений (C++):

Вывести в алфавитном порядке предпоследние слова всех предложений - C++
Дан текст, состоящий из N (2&lt;=N&lt;=10) строк с максимальной длиной 80 символов. Необходимо вывести в алфавитном порядке предпоследние слова...

Напечатать в столбик последние слова всех предложений текста - C++
Текст из файла считывается и записывается во второй файл Напечатать в столбик последние слова всех предложений текста.

Ввести пару предложений и создать таблицу, в которой слова сортируются в алфавитном порядке - C++
Вот текст задачи: Первую часть я решил, проблема возникла со второй частью задания т.к. я вывел в табулированном формате...

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

Вывести слова в алфавитном порядке - C++
С клавиатуры читается последовательность строк. Напечатать ее в лексикографическом порядке.

Вывести слова в алфавитном порядке - C++
Здравствуйте, помогите доделать прогу, в ней выводятся слова которые состоят из 4 букв, ещё нужно сделать так что бы они выводились в...

6
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
17.05.2011, 10:19 #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
51
52
53
54
55
bool findlastword(char * str,char * word)
{
    //Find string lenght
    char buff[64]={0};
    for( int i = (strlen(str) - 2),j = 0; i > 0; --i,++j)
    {
        if(str[i] == ' ' || str[i] == ',')
            break;
        else
            buff[j] = str[i];
    }
    //Overturn string
    for( int i = (strlen(buff) - 1),j = 0; i >= 0; --i,++j)
        word[j] = buff[i];
    return true;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> last_words;
    vector<string>::iterator it;
    int n = 0;
    char word[64];
    char str[10][80]={"I like to wearo high-heeledo shoesee, trousers oor jeans.",
                                   "Aaaarrr ttttttr oot iyt tiropeweo!",
                                   "Russia is very reach in oil, iron ore, natural gas, copper, nickel.",
                                   "It is a wonderful sight you see our country from the plane.",
                                   "Throughout its history the Zoo has had many well-known residents.",
                                   "The lakes in Scotland are called locks.",
                                   "Thames is busiest and most important river in Great Britain.",
                                   "Although this vast collection was part of the Zoo's appeal.",
                                   "These include species such as rudd, European eels, pink sea fans.",
                                   "There is much rain and fog in autumn and in winter!"};
 
    while((n<2)||(n>10))
    {
        printf("Insert number of strings - 2 do 10:\n");
        scanf("%d",&n);
        printf("\n");
    }
    for( int i = 0; i < n; ++i)
    {
        memset(word,0,64);
        findlastword(str[i],word);
        last_words.push_back(word);
    }
    sort(last_words.begin(),last_words.end());
 
    for (it=last_words.begin(); it!=last_words.end(); ++it)
        printf("%s\n",(*it).c_str());
 
    getchar();
    return 0;
}
1
Erisu
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 14
18.05.2011, 17:31  [ТС] #3
А сможите объяснить, что вы сделали, а то я тупая(
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
18.05.2011, 17:39 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool findlastword(char * str,char * word)
{
        //Find string lenght
        char buff[64]={0};
        for( int i = (strlen(str) - 2),j = 0; i > 0; --i,++j)
        {
                if(str[i] == ' ' || str[i] == ',')
                        break;
                else
                        buff[j] = str[i];
        }
        //Overturn string
        for( int i = (strlen(buff) - 1),j = 0; i >= 0; --i,++j)
                word[j] = buff[i];
        return true;
}
функция для нахождения последнего слова. Ты ей подставляешь строку str и пустой массив word, она находит в str последнее слово и записывает word.
C++
1
2
3
4
5
6
for( int i = 0; i < n; ++i)
        {
                memset(word,0,64);
                findlastword(str[i],word);
                last_words.push_back(word);
        }
пробегаешься по всему тексту и находишь в каждом предложение последнее слово. После этого добавляешь в вектор <string>. После того как все добавишь, сортируешь элементы вектор с помощью стандартной функции сортировки.
C++
1
sort(last_words.begin(),last_words.end());
ну и выводишь на экран.
C++
1
2
for (it=last_words.begin(); it!=last_words.end(); ++it)
                printf("%s\n",(*it).c_str());
описание всех функций можешь найти в инете. код не тестировал.
1
Erisu
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 14
18.05.2011, 18:54  [ТС] #5
Он почему-то придирается к sort(last_words.begin(),last_words.end());. Выводит [C++ Error] Unit1.cpp(59): E2268 Call to undefined function 'sort'.
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
18.05.2011, 19:06 #6
нужно подключить нужные библиотеки. посмотри в описании функций какие библиотеки им нужны
1
Erisu
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 14
18.05.2011, 19:19  [ТС] #7
СПАСИБО ОГРОМНОЕ!)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2011, 19:19
Привет! Вот еще темы с ответами:

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

Вывести слова в строке в алфавитном порядке - C++
Есть строка char (проинициализированная в коде), где слова разделены пробелами и запятыми. Нужно вывести слова в алфавитном порядке. Нельзя...

Вывести на экран слова заданного текста в алфавитном порядке - C++
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Вывести на экран слова этого текста...

Вывести слова текста в алфавитном порядке и посчитать их количество - C++
1. Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Вывести на экран слова этого...


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

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

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