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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
sasha45
0 / 0 / 0
Регистрация: 16.01.2008
Сообщений: 3
#1

Упорядочить в каждой строке текста слова в алфавитном порядке - C++

16.01.2008, 23:55. Просмотров 1622. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста. Очень срочно нужна помощь людей, знающих С. Нужно написать программу в которой:
Задан текст, содержащий произвольное количество строк, в котрых отдельные слова могу разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов не используется). Сформировать новый текст, который является результатом следующего преобразования:упорядочить в каждой строке слова в алфавитном порядке.

В общем у меня написано все, но функция обработки не хочет работать. Посмотрите пожалуйста:
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
char **obrabotka(char **text, int n)
// n - кол-во строк в тексте. **text - введенный текст
{
    char **res;
    // переменная под результатchar **tmp;
    // для работы с исходным текстом
    int j;
    int k,l,z;
    struct words
    {
        char *p;      // указатель на первую букву слова
        int len;      // количество букв в слове
    }    words[80];
    memset(&words, '\0', sizeof(words));   // обнуляем p==NULL - элемент
    // не использовался
    tmp=text;
    for(j=0; j<n; j++);   // Идем по строкам текста
    {
        // и производим обработку отдельно каждой строки
        while((**tmp!='\0' && (k<80)))   // пока не конец строки
            // и в строке меньше 80 слов
        {
            if(words[k].p==NULL)
                *words[k].p=**tmp;
            switch (**tmp) // проверка на разделители
            {
            case ' ':
            case '.':
            case ',':
            case ';':
            case '\n':
            case '!':
            case '#':
            case '@':
            case '?':
            case '/':
            case '>':
            case '<':
            case ':':
            case '$':
            case '(':
            case ')':
            case '*':
            case '&':
            case '-':
            case '=':
            case '+':
                words[k].len=*tmp-words[k].p;  // разница между указателями - длина
// слова. tmp указывает на начало след. слова
// или на конец строки
                k++;          // переходим к след. слову
                break;
            }
            tmp++;
        }
        words[k].len=*tmp-words[k].p;
        printf(" %u слов найдено в строке \n", k+1);
        // Сортировка
        for(; k>0; k--)     // k - максимальное значение элементов массива
        {
            for(l=0; l<l; l++)
            {
                if(strncmp(words[l].p,words[l+1].p,MIN(words[l].len,words[l+1].len))>0)
                {
                    *tmp=words[j].p;
                    z=words[l].len;
                    //перестановка элемента
                    words[l].p=words[l+1].p;
                    words[l].len=words[l+1].len;
                    words[l+1].p=*tmp;
                    words[l+1].len=z;
                }
            }
        }
        res=(char**)calloc(strlen(*text)+1,1);    // выделение памяти под результат
        for(k=0,tmp=res; words[k].p!=NULL; k++);
        {
            while((words[k].len--)>0)
                **(tmp++)=*(words[k].p++);
            **(tmp++)=*(words[k].p)?*(words[k].p): ' ';
            //копируем оригинальный разделитель слов
        }
        **tmp='\0';
        // записываем конец строки
        return res;   // возвращаем результат}
    }
Программу нужно сдать завтра, а из-за этой функции она не хочет работать.
Помогите плиз разобраться где ошибка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2008, 23:55     Упорядочить в каждой строке текста слова в алфавитном порядке
Посмотрите здесь:

В заданной строке найти и упорядочить в алфавитном порядке слова, начинающиеся с прописной буквы - C++
Здравствуйте,помогите,пожалуйста,разобраться.Необходимо вывести в алфавитном порядке слова, начинающиеся с прописных букв for (int i = 0;...

Упорядочить слова в алфавитном порядке на С - C++
ребят помогите с задачкой, а то препод озадачил. самому не получается сделать. требуется отсортировать слова в строке в алфавитном...

Упорядочить слова в алфавитном порядке - C++
Помогите, пожалуйста, исправить ошибки.. Задание было такое: Дана строка, содержащая символы. Часть этих символов заключена в парные ...

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

Слова текста в алфавитном порядке - C++
Дан файл. Нужно вывести все слова этого текста в алфавитном порядке. Помогите пожалуйста Добавлено через 19 часов 59 минут каким...

Напечатать слова текста в алфавитном порядке - C++
3. Задан текст. Слова разделены пробелом. Напечатать слова этого текста в алфавитном порядке.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
drummer
2 / 2 / 0
Регистрация: 13.01.2008
Сообщений: 38
17.01.2008, 00:17     Упорядочить в каждой строке текста слова в алфавитном порядке #2
Код хоть бы нормально написал
B_N
Сообщений: n/a
17.01.2008, 04:42     Упорядочить в каждой строке текста слова в алфавитном порядке #3
Точка с запятой после for нужна? А вообще невозможно эту обфускацию читать, особенно "срочно"..
sasha45
0 / 0 / 0
Регистрация: 16.01.2008
Сообщений: 3
17.01.2008, 07:47  [ТС]     Упорядочить в каждой строке текста слова в алфавитном порядке #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
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
char **obrabotka(char **text, int n)  // n - кол-во строк в тексте. **text - введенный текст
  {
    char **res;       // переменная под результат
    char **tmp;       // для работы с исходным текстом
    int j;
    int k,l,z;
 
    struct words
      {
        char *p;      // указатель на первую букву слова 
        int len;      // количество букв в слове
      }
    words[80];        
 
    memset(&words, '\0', sizeof(words));   // обнуляем p==NULL - элемент
                                          // не использовался
 
    tmp=text;
    for(j=0;j<n;j++);                 // идем по строкам текста и каждую         
                                          // обрабатываем отдельно
      {
        while((**tmp!='\0' && (k<80)))   // пока не конец строки
                                                               // и в строке меньше 80 слов
                                         
          {
            if(words[k].p==NULL)         
              *words[k].p=**tmp;
            switch (**tmp)               // проверка на разделители
              {
                case ' ':
                case '.':
                case ',':
                case ';':
                case '\n':
                case '!':
                case '#':
                case '@':
                case '?':
                case '/':
                case '>':
                case '<':
                case ':':
                case '$':
                case '(':
                case ')':
                case '*':
                case '&':
                case '-':
                case '=':
                case '+':
                  words[k].len=*tmp-words[k].p;  // разница между указателями - длина
                                                              // слова. 
                                                            // tmp указывает на начало след. слова
                                                               // или на конец строки
                  k++;          // переходим к след. слову
                  break;
              }
            tmp++;
          }
        words[k].len=*tmp-words[k].p;
 
        printf(" %u слов найдено в строке \n", k+1);
 
        // Сортировка
        for(;k>0;k--)       // k - максимальное значение элементов массива
                        
          {
            for(l=0;l<l;l++)
              {
                if(strncmp(words[l].p,words[l+1].p,MIN(words[l].len,words[l+1].len))>0)
                  {
                    *tmp=words[j].p;
                    z=words[l].len;      //перестановка элемента
                    words[l].p=words[l+1].p;
                    words[l].len=words[l+1].len;
                    words[l+1].p=*tmp;
                    words[l+1].len=z;
                  }
              }
          }
        res=(char**)calloc(strlen(*text)+1,1);    // выделение памяти под результат
                                                
 
        for(k=0,tmp=res;words[k].p!=NULL;k++);
          {
            while((words[k].len--)>0)
              **(tmp++)=*(words[k].p++);
              **(tmp++)=*(words[k].p)?*(words[k].p): ' ';  //копируем оригинальный разделитель  
                                                                                               //слов
                                                          
          }
        **tmp='\0';   // записываем конец строки
        return res;   // возвращаем результат
      }
  }
Гость
Сообщений: n/a
17.01.2008, 13:09     Упорядочить в каждой строке текста слова в алфавитном порядке #5
ненавижу посты с сабжектом "срочно. помогите."
научись быть информативным.
не помогайте этому двоешнику - может хоть кривых программ будет меньше.
Vovan-VE
13120 / 6501 / 185
Регистрация: 10.01.2008
Сообщений: 15,061
17.01.2008, 14:17     Упорядочить в каждой строке текста слова в алфавитном порядке #6
Точку с запятой в двух местах фтопку
C++
1
2
3
4
5
    for(j=0;j<n;j++) //;
      {
/* ... */
        for(k=0,tmp=res;words[k].p!=NULL;k++) //;
                {
А то с ней получается for без тела, а за ним блок сам по себе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2008, 15:51     Упорядочить в каждой строке текста слова в алфавитном порядке
Еще ссылки по теме:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
sasha45
0 / 0 / 0
Регистрация: 16.01.2008
Сообщений: 3
18.01.2008, 15:51  [ТС]     Упорядочить в каждой строке текста слова в алфавитном порядке #7
Ну ладно. Закрывайте тему.
Yandex
Объявления
18.01.2008, 15:51     Упорядочить в каждой строке текста слова в алфавитном порядке
Ответ Создать тему
Опции темы

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