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

Отсортировать слова в предложении по алфавиту и подсчитать количество слов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения при заданных исходных данных http://www.cyberforum.ru/cpp-beginners/thread761136.html
что то не то помогите найти ошибку первое задание #include <iostream.h> #include <math.h> int main () { int x,j,a,double y; a =11,5; x =3,2; j =3; y =(x+2)log10(x+pow(a,3)-j*pow(x,15)/2 ;
C++ дан целочисленный массив из n элементов. найти в нем убывающую последовательность максимальной длины дан целочисленный массив из n элементов. найти в нем убывающую последовательность максимальной длины http://www.cyberforum.ru/cpp-beginners/thread761135.html
C++ Удалить строку матрицы с номером R
дано число r и матрица размером m×n удалить строку матрицы с номером r
Расшифровка задания C++
Доброго времени суток. Только начал изучать работу с файлами, и либо это некорректно сформулированное задание, либо я не понимаю чего-то очевидного. Вот задание: "Создать три файла F1, F2 и F3, состоящие каждый не менее чем из 8 компонент целого типа. Упо- рядочить каждый файл по убыванию значений компонентов. Объединить файлы F1, F2 и F3 в один файл в последовательности: компонент файла...
C++ Вывод вектора на экран (классы) http://www.cyberforum.ru/cpp-beginners/thread761089.html
Доброй ночи. Вкратце: есть класс банк и есть класс группа банков (который состоит из множества банков). Хочу сделать так , что б можно было в вектор добавлять банки и что б можно было напечатать этот вектор. набросал чутка код программы. test.cpp #include "bank.h" #include <iostream> #include <vector> using namespace std;
C++ Создание файлов данных последовательного доступа Разработайте алгоритм и создайте программу для записи, чтения и корректировки данных в файле последовательного доступа задание: NSI ( нормативно-справочная информация) KODp – код потребителя; Fm – фамилия; TARIF – тариф; PENdn – пеня за просроченный день; подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.01.2013, 03:14     Отсортировать слова в предложении по алфавиту и подсчитать количество слов
Вот вариан со strtok, как предложил m1Rr0r и динамическим выделением памяти. Хотелось бы также заметить, что прописные символы "меньше" строчных, поэтому слова с заглавной буквы будут стоять первыми. Если хотите избежать этого эффекта нужно влючить проверку использую функцию toupper().
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
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cctype>
 
/* Функция pushline выделяет динамическое пространство
   для строки и должна быть "освобождена" при помощи функции free() */
char* pushline();
char* sortline(char *, int *);
 
int main()
{
    printf("Put a line:\n");
    char *s = pushline();
    int n = 0;
    
    s = sortline(s, &n);
    printf("\nNow we have new line:\n");
    printf("%s", s);
    printf("\n\n..which contain %d words.\n", n);
 
    /* free */
    free(s);
 
    return 0;
}
 
char* pushline()
{
    int c, i = 0;
    char *str = NULL;
 
    while ((c = getchar()) != EOF && c != '\n') {
        str = (char*)realloc(str, (i+2) * sizeof(char));
        str[i++] = c;
    }
    str[i++] = '\n';
    str[i] = '\0';
 
    return str;
}
 
char* sortline(char *line, int *n)
{
    size_t lsize = strlen(line) + 1;
    int i = 0;
    char *ptr = NULL;
    /* lsize/2 взято в расчете на то, что минмальное слово
       состоит из 2х символов: одного прописного символа
       и одного пробельного символа */
    char *parr[lsize/2]; // массив указателей
    ptr = strtok(line, " \n\t\b");
    parr[i] = (char*)calloc(lsize*2, sizeof(char));
    strcpy(parr[i], line);
    for ( ++i; ptr; ++i) {
        ptr = strtok('\0', " \n\t\b");
        if (ptr != NULL) {
            parr[i] = (char*)calloc(lsize*2, sizeof(char)); ;
            strcpy(parr[i], ptr);
        }
    }
    *n = --i;
    /* sort and push*/
    line[0] = '\0';
    for (char **pt_main = parr, **pt_end = parr + i; pt_main != pt_end; ++pt_main) {
        char **pt_min = pt_main;
        for (char **pt_sub = pt_main + 1; pt_sub != pt_end; ++pt_sub)
            if (*pt_min != '\0' && *pt_sub != '\0' && (strcmp(*pt_min, *pt_sub) > 0))
                pt_min = pt_sub;
        char *tmp_word = (char*)malloc((lsize*2) * sizeof(char));
        strcpy(tmp_word, *pt_main);
        strcpy(*pt_main, *pt_min);
        strcpy(*pt_min, tmp_word);
        strcat(line, *pt_main);
        (pt_main == pt_end - 1) ? strcat(line, "\0") : strcat(line, " ");
        free(tmp_word);
    }
 
    while (i)
        free(parr[--i]);
    return line;
}
Добавлено через 11 минут
Да, кстати заголовок <cctype> можно убрать и 68 строку просто заменить на
C++
1
if (strcmp(*pt_min, *pt_sub) > 0)
Добавлено через 23 часа 43 минуты
Можно даже ещё сделать проще: 20 строчик кода:
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
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include <cctype>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string str;
    vector<string> v;
    int count = 0;
 
    for (char c; (c = getchar()) != EOF; ) {
        if (!isspace(c)) {
            str += c;
        }
        else {
            if (!str.empty()) {
                v.push_back(str);
                ++count;
            }
            str = '\0';
        }
        if (c == '\n')
            break;
    }
    sort(v.begin(), v.end());
    for (vector<string>::const_iterator i = v.begin(); i != v.end(); ++i) {
        cout << *i;
        (i == v.end() - 1) ? cout << '\n' : cout << ' ';
    }
    cout << "String has " << count << " characters.\n";
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru