Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2015, 19:50   #1
andreyfom
Новичок
Джуниор
 
Регистрация: 08.10.2015
Сообщений: 2
По умолчанию Заполнение массива char (C)

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

Код:
int a, b, c = 0, d, kolsl;
char word [200];

for( a = 0 ; massiv[a][b] != '\0' ; a++)
{
        povtori[d].eshenet = 0;
        for( b = 0 ; massiv[a][b] != '\n'; b++)
        {
                printf("%d, %d, c: %d | ", a,b,c );

                if ( massiv[a][b]!=' ')  //(!isspace(massiv[i][a])) && (!ispunct(massiv[i][a])) )
                {
                        word[c]=massiv[a][b];
                        c++;
                }
                else
                {
                printf("тут он нашел пробел");
                  for( d =0 ;d <=kolsl ;d++)
                        {
                                //printf("  else1");
                                const char* w1 = povtori[d].slovo;
                                const char* w2 = word;
                                if (strcmp( w1, w2 ) && povtori[d].eshenet)
                                {
                                        printf("  sovpalo");
                                        povtori[d].shetchk++;
                                        povtori[d].eshenet = 0;
}
                                else
                                {
                                        //printf("  else");
                                        int g;
                                        while(word[g]!='\0')
                                        {
                                                //printf("  novoe");
                                                povtori[kolsl].slovo[g]=word[g];
                                                g++;
                                        }
                                        printf(" slovo:  %s", povtori[b].slovo);
                                        //printf(".  ");
                                }
                        }
                c=0;
                for(int i=0; word[i]!='\0';i++)
                        word[i]='\0';
}
        printf("%s|\n",word);
        }
}
for(b = 0; b <= kolsl-1; b++)
               printf(" %s - %d \n", povtori[b].slovo, povtori[b].shetchk);
return 0;

}
пёс пока с ним со всем алгоритмом, но вот буфер word[] заполняется как-то странно, увеличивая длинну исходной строки в два раза, в промежутке между буквами считывая вопросительный знак в ромбе так, если бы он не знал кириллицу. Пробелы находит, слова видит.
В чем беда с чтением?

Вот вывод:
Цитата:
andrey@first:~/Desktop/Tekhnopark/Homework1$ gcc try.c
andrey@first:~/Desktop/Tekhnopark/Homework1$ ./a.out 4 tekst.txt
0, 0, c: 0 | �QG|
0, 1, c: 1 | ЛG|
0, 2, c: 2 | Л�G|
0, 3, c: 3 | Ла|
0, 4, c: 4 | Ла|
0, 5, c: 5 | Лас|
0, 6, c: 6 | Лас�|
0, 7, c: 7 | Ласт`b��|
0, 8, c: 8 | Ласт�b��|
0, 9, c: 9 | Ласто��|
0, 10, c: 10 | Ластођ|
0, 11, c: 11 | Ласточ|
0, 12, c: 12 | Ласточ|
0, 13, c: 13 | Ласточк|
0, 14, c: 14 | Ласточк�|
0, 15, c: 15 | Ласточка�@|
0, 16, c: 16 | тут он нашел пробел slovo: |
0, 17, c: 0 | �|
0, 18, c: 1 | л|
0, 19, c: 2 | л�|
0, 20, c: 3 | ла|
0, 21, c: 4 | ла�|
0, 22, c: 5 | лас|
0, 23, c: 6 | лас�|
0, 24, c: 7 | ласт|
0, 25, c: 8 | ласт�|
0, 26, c: 9 | ласто|
0, 27, c: 10 | ласто�|
0, 28, c: 11 | ласточ|
0, 29, c: 12 | ласточ�|
0, 30, c: 13 | ласточк|
0, 31, c: 14 | ласточк�|
0, 32, c: 15 | ласточка|
0, 33, c: 16 | тут он нашел пробел slovo: |
0, 34, c: 0 | �|
0, 35, c: 1 | д|
0, 36, c: 2 | д�|
0, 37, c: 3 | да|
0, 38, c: 4 | да�|
0, 39, c: 5 | дай|
0, 40, c: 6 | тут он нашел пробел slovo: |
0, 41, c: 0 | �|
0, 42, c: 1 | м|
0, 43, c: 2 | м�|
0, 44, c: 3 | мо|
0, 45, c: 4 | мо�|
0, 46, c: 5 | мол|
0, 47, c: 6 | мол�|
0, 48, c: 7 | моло|
0, 49, c: 8 | моло�|
0, 50, c: 9 | молок|
0, 51, c: 10 | молок�|
0, 52, c: 11 | молока|
0, 53, c: 12 | тут он нашел пробел slovo: |

Последний раз редактировалось Stilet; 08.10.2015 в 21:29. Причина: хотел сделать код читабельнее, выведя его в виде цитаты [QUOTE]
andreyfom вне форума Ответить с цитированием
Старый 08.10.2015, 21:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... А я бы наверное делал не так...
Я бы наверное:
1) Подсчитал бы сколько абзацев.
2) Подсчитал бы какое максимальное кол-во в абзацах слов (например максимальное кол-во пробелов)
3) По этим двум параметрам сформировал бы матрицу строк
4) Разнес бы абзацы на массив слов (Каждая строка матрицы - запись из слов в абзаце по ячейкам массива строки)
5) Потом бы уже работал по матрице.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2015, 18:59   #3
andreyfom
Новичок
Джуниор
 
Регистрация: 08.10.2015
Сообщений: 2
По умолчанию

Ну весь агоритм как есть так и есть. Вопрос в том почему при таком алгоритме чтения происходит подобное
andreyfom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведение массива char[] (или char* ) в LPCTSTR polin11 Общие вопросы C/C++ 3 29.07.2015 17:01
Одномерные массивы Внимание! В задаче реализовать заполнение массива, вывод на экран исходного массива и измененного (если при ре Гарри Паскаль, Turbo Pascal, PascalABC.NET 1 25.06.2015 08:55
Заполнение listbox значениями из массива. Заполнение массива. Gnaqeaz C# (си шарп) 9 23.10.2014 07:53
Заполнение массива строк типа char. KuckaMAXHATKA Помощь студентам 3 15.02.2011 21:21
Заполнение массива типа char. KuckaMAXHATKA Общие вопросы C/C++ 1 15.02.2011 18:07