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

Ошибка в сортировке русского текста - C++

Восстановить пароль Регистрация
 
ruslan_bastos
1 / 1 / 0
Регистрация: 10.12.2012
Сообщений: 17
25.05.2013, 09:07     Ошибка в сортировке русского текста #1
Есть произвольный текст и его слова нужно отсортировать в алфавитном порядке. Результат записать в другой текстовый файл. При сортировке слова обрезаются или исчезают символы из них.

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
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "Windows.h"
#include <string.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    //указатели на файлы
    FILE *in, *out;
    char mas[100][100], *word[100] = {NULL};
    int numWords = 0;
    char seps[] = " .,!?\n";
    
    int n = 0;
                    
    in = fopen("in.txt", "r");
    //Проверка на открытие файла
    if(in == NULL)
    {
        printf("Данный файл не найден!\n");
        return 0;
    }   
 
    while(!feof(in))
    {
        //Сканирую полностью строку из файла
        fgets(mas[n], 100, in);
        printf("%s", mas[n]);
        n++;                
    }       
    fclose(in);
 
    
    for(int i = 0; i < n; i++)
    {
        //Функция strtok выбирает из перменной mas до знака из seps все символы в word отправляя указатель. То есть разделяет строку на отдельные слова
        //Ищем первое слово
        word[numWords] = strtok(mas[i], seps);
        while( word[numWords] != NULL )
        {
            numWords++;
            //ищем следующее слово
            word[numWords] = strtok(NULL, seps); 
        }
    }
 
    char tmp[20];
 
        for(int i = 0; i < numWords-1; i++)
        {
            for(int j = i+1 ;j < numWords; j++)
            {
                if(strcmp(word[i], word[j]) > 0)
                {
                    strcpy(tmp, word[i]);
                    memset(word[i], 0, sizeof(word[i]));
                    strcpy(word[i], word[j]);
                    memset(word[j], 0, sizeof(word[j]));
                    strcpy(word[j], tmp);
                //  memset(tmp, 0, sizeof(tmp));
                }
            }
        }
 
    out = fopen("out.txt", "w");
 
    for(int i = 0; i < numWords; i++)
    {
        fprintf(out, "%s ", word[i]);
    }
 
    fclose(out);
    printf("\nГотово.\n");  
    getch();    
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 09:07     Ошибка в сортировке русского текста
Посмотрите здесь:

C++ Обработка русского текста в консольном режиме.
C++ Ввод с клавиатуры русского текста
Сохранение в файл русского текста C++
C++ Вывод русского текста в консоли
Запись в файл русского текста C++
структуры и использование русского текста C++
Некорректный ввод русского текста C++
Программа для перевода текста с русского на английский C++

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

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

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