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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Управление предприятием http://www.cyberforum.ru/cpp-beginners/thread512088.html
Помогите пожалуйста с лабораторной: Предприятие содержит несколько подразделений, которые разбиты на отдельные сектора. Среди работников этих подразделений могут быть рабочие и служащие, отличающиеся формой оплаты труда. Каждый работник предприятия может иметь детей. О каждом из этих объектов хранится следующая информация: ОТДЕЛ:< код отдела, наименование, ФИО начальника, N телефона,...
C++ Списки и деревья Помогите, плиз... чет у меня не получается с ней ничего((( Написать программу, которая вводит с клавиатуры список целых чисел, ищет максимальный элемент списка, затем вводит с клавиатуры сбалансированное дерево и считает глубину дерева. Заранее спасибо) http://www.cyberforum.ru/cpp-beginners/thread512085.html
Все возможные a и b по формуле с вложенными циклами C++
Само задание: Любое натуральное число N (N>7) можно получить по формуле n = 3a + 5b, где a и b - натуральные числа. Исходя из полученного N найти все a и b. К сожалению я не могу понять самой сути задания. Может кто растолкует. И еще: как выполнить проверку на вводимое значение? Я попытался реализовать это вот так: main(){ int n, a, b; while (n > 7){ printf("Enter N (N >...
Полиморфизм c++ C++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты производного класса, отсортировать их и сложить как числа. Выбрать объекты базового класса, отсортировать их и сцепить их в одну строку, начиная с последнего и до первого.
C++ Реализовать команду Сd-смена поточного каталога в Borland C++ http://www.cyberforum.ru/cpp-beginners/thread512074.html
Задача: Реализовать команду СD-смена поточного каталога в Borland C++ (как в коммандной строке)
C++ Наследование STR c++ Построить производный класс Str10 как строку только из цифр. Определить методы: сравнения как чисел, преобразования в число, создание из числа, сложения как чисел и другие необходимые. подробнее

Показать сообщение отдельно
$ht0p0r
3 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 3
04.03.2012, 14:47     Создание односвязного списка из строки, полученной в файле
Здравствуйте, имеется файл, который содержит некий текст. Необходимо подсчитать количество вхождений каждого слова в этот текст и результат поместить в односвязный список. Вот мой код
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
 
struct Word{
    int number;   //число вхождений слова в текст
    char* word;   //само слово
    Word* next;   //указатель на следующую структуру
};
 
class List{
    char str[512];   //строка, в которую помещается текст файла  
    Word* head;      //указатель на первый элемент односвязного списка
    Word* current;   //указатель на текущий элемент
public:
    List();
    List(char path[20]);
    void addWord();
    int check(char* c);
    void search();
    void show();
};
 
List* l= new List();
 
List::List(){
    head=NULL;
    current=NULL;
};
 
List::List(char path[20]){  //в качетсве аргумента задается путь к файлу
    head=NULL;
    current=NULL;
    FILE* f=fopen(path,"r");
    if (f) {
    fgets(str,512,f);
    printf("%s\n",str);
    }
    else {
        printf("Error");
    };
    fclose(f);
};
 
void List::addWord(){  //создание нового элемента списка
    Word* w=new Word;
    w->next=NULL;
    if (l->head==NULL){
        l->head=w;
    }
    else {
        l->current=l->head;
        while(l->current->next!=NULL){
            l->current=l->current->next;
        };
        l->current->next=w;
    };
};
 
int List::check(char* c){  //проверка на наличие слова в списке
    l->current=l->head;
    int a;
    while(l->current->next!=NULL){      //вот здесь
        if (strcmp(l->current->word,c)){
            a=1;
            break;
        }
        else {
            l->current=l->current->next;
            a=0;
        };
    };
    return a;
};
 
void List::search(){  //поиск слов в строке
    int i;
    char* s;
    for(i=0; str[i]; i++){    //преобразование заглавных букв в строчные
        if ((str[i]>='A')&&(str[i]<='Z')){
            str[i]+=32;
        };
    };
 
    for(s=strtok(str," ,.?-!;()"); s!=NULL; s=strtok(NULL," ,.?-!;()")){  //разделение строки на слова
            if (l->check(s)){
                l->current=l->head;
                while (l->current->next!=NULL){
                    if (strcmp(l->current->word,s)){
                        l->current->number=(l->current->number)++;
                    };
                };
            }
            else {
                l->addWord();
                while (l->current->next!=NULL){
                    l->current=l->current->next;
                };
                l->current->word=s;
                l->current->number=1;
            };
        };  
//  };
    printf("%s\n",str);
};
 
void List::show(){  //вывод на экран
    l->current=l->head;
    while(l->current->next!=NULL){
        printf("Word: %s/t Nubmer: %d/n",l->current->word, l->current->number);
        l->current->next;
    };
};
 
int main(){
    List* l=new List("c:\\example1.txt");
    l->search();
    l->show();
    getchar();
    return 0;
}
Visual Studio 2010 при запуске пишет, построение успешно 1, с ошибками 0. На секунду появляется экран с результатом первого printf из конструктора класса, но потом выскакивает окно с надписью
"Необработанное исключение. Нарушение прав доступа при чтении." и стрелка указывает на while из описания check. В чем может быть проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru