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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
wesleepforever
0 / 0 / 0
Регистрация: 27.06.2011
Сообщений: 13
27.06.2011, 18:30     Напечатать слова в алфавитном порядке #1
В текстовом файле записаны слова, разделенные пробелами. Известно, что
число слов не превышает 90 слов, длина слов от 1 до 20 символов, межу
соседними словами – не менее одного пробела. Напечатать эти слова в
алфавитном порядке. Указание. При размещении слов в памяти выделяйте
память под каждое слово, адреса слов храните в массиве символьных
указателей.

помогите,пожалуйстаа)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.06.2011, 18:42     Напечатать слова в алфавитном порядке #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <stdlib.h>
int main(){
    std::vector<std::string> text;
    std::string word;
    for (std::ifstream in("input.txt"); in >> word; text.push_back(word));
    std::sort(text.begin(),text.end());
    std::ostream_iterator<std::string> out(std::cout,"\n");
    copy(text.begin(),text.end(),out);
    system("pause");
    return 0;
}
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
27.06.2011, 18:51     Напечатать слова в алфавитном порядке #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <cstdlib>
 
bool pred(std::string strFirst, std::string strSecond) { return (strFirst < strSecond); }
 
void print(std::string str) { std::cout << str << std::endl; }
 
int main()
{
    std::ifstream input("input.txt");
    std::vector <std::string> vectorStrings;
    std::istream_iterator <std::string> it(input);
    std::istream_iterator <std::string> eof;
 
    if (!input.is_open())
    {
        std::cout << "Error. Can't open file." << std::endl;
        std::cin.get();
        _exit(EXIT_FAILURE);
    }
 
    std::string temp;
    while (it != eof)
        vectorStrings.push_back(*it++);
 
    std::sort(vectorStrings.begin(), vectorStrings.end(), pred);
 
    std::for_each(vectorStrings.begin(), vectorStrings.end(), print);
 
    std::cin.get();
    return 0;
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.06.2011, 18:56     Напечатать слова в алфавитном порядке #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <fstream>
#include <set>
#include <iterator>
#include <algorithm>
 
int main(){
    std::ifstream ifs("1.txt");
    if(!ifs){std::cerr<<"File not found\n"; return 1;}
    std::multiset<std::string> strSet((std::istream_iterator<std::string>(ifs)), std::istream_iterator<std::string>());
    std::copy(strSet.begin(), strSet.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
    ifs.close();
    return 0;
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.06.2011, 22:04     Напечатать слова в алфавитном порядке #5
В текстовом файле записаны слова, разделенные пробелами. Известно, что
число слов не превышает 90 слов, длина слов от 1 до 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <cstddef>
#include <cstring>
#include <cerrno>
 
struct Cmp
{
    bool operator()(const char* a, const char* b) const
    {
        return std::strcmp(a, b) < 0;
    }
};
 
int main(int argc, char* argv[])
{
    if(argc < 2)
    {
        std::cout << argv[0] << ": no input file\n";
        return 0;
    }
 
    std::ifstream inFile(argv[1]);
    if(!inFile)
    {
        std::cerr << argv[1] << ": " << std::strerror(errno) << '\n';
        return 1;
    }
 
    const std::size_t Max_Words_Count = 90;
    const std::size_t Max_Word_Len = 21;
 
    char buf[Max_Word_Len];
    char* words[Max_Words_Count];
 
    std::size_t n = 0;
    while( (inFile >> std::setw(Max_Word_Len) >> buf) && (n < Max_Words_Count) )
        words[n++] = std::strcpy(new char[std::strlen(buf) + 1], buf);
 
    inFile.close();
 
    std::sort(words, words+n, Cmp());
 
    for(std::size_t i = 0; i < n; ++i)
    {
        std::cout << words[i] << '\n';
        delete[] words[i];
    }
 
    return 0;
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
27.06.2011, 23:42     Напечатать слова в алфавитном порядке #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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define DELIMS " .,"
 
void str_nl_remove(char *, int);
int compare(const void *, const void *);
 
int main()
{
    char **words = NULL;
    char *word;
    char buf[BUFSIZ];
    size_t cnt = 0;
    size_t i = 0;
    FILE *input_file;
 
    printf("Enter a file name: ");
    fgets(buf, BUFSIZ, stdin);
    str_nl_remove(buf, strlen(buf));
 
    if ((input_file = fopen(buf, "r")) == NULL) {
        fprintf(stderr, "Cannot open file \"%s\"\n", buf);
        exit(1);
    }
 
    while (! feof(input_file)) 
    {
        if ((fgets(buf, BUFSIZ, input_file)) == NULL) {
            puts("Error while reading from file!\n");
            exit(2);
        }
        str_nl_remove(buf, strlen(buf));
 
        for (word = strtok(buf, DELIMS);
            word != NULL;
            word = strtok(NULL, DELIMS))
        {
            ++cnt;
            if((words = (char **)realloc(words, cnt * sizeof(char *))) == NULL)
            {
                fputs("Cannot allocate memory\n", stderr);
                exit(3);
            }
            if((words[cnt - 1] = strdup(word)) == NULL)
            {
                fputs("Cannot duplicate word\n", stderr);
                exit(4);
            }
        }
 
    }
    qsort(words, cnt, sizeof(char *), compare);
 
    for (i = 0; i < cnt; ++i) {
        printf("%s\n", words[i]);
        free(words[i]);
    }
    free(words);
    exit(0);
}
 
void str_nl_remove(char *str, int len)
{
    if (len > 0 && str[len-1] == '\n') {
        str[len-1] = '\0';
    }
}
 
int compare(const void *s1, const void *s2)
{
    return strcmp(
        *(const char * const *)s1,
        *(const char * const *)s2);
}
Yandex
Объявления
27.06.2011, 23:42     Напечатать слова в алфавитном порядке
Ответ Создать тему
Опции темы

Текущее время: 16:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru