Форум программистов, компьютерный форум 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, 18:04  [ТС]     Создание односвязного списка из строки, полученной в файле
Исправил, теперь все компилируется нормально. Но код не работает. Выводится только строка из конструктора класса. Прошу проверить код, не уверен в правильности использования strtok.
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
#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(char path[20]);
    void addWord();
    int check(char* c);
    void search();
    void show();
};
 
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 (head==NULL){
        head=w;
    }
    else {
        current=head;
        while(current->next!=NULL){
            current=current->next;
        };
        current->next=w;
    };
};
 
int List::check(char* c){  //проверка на наличие слова в списке
    current=head;
    int a=0;
    if(current!=NULL){
      while(current->next!=NULL){       
        if (strcmp(current->word,c)){
            a=1;
            break;
        }
        else {
            current=current->next;
        };
      };
    };
    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 (check(s)){
                current=head;
                while (current->next!=NULL){
                    if (strcmp(current->word,s)){
                        current->number=(current->number)++;
                    };
                };
            }
            else {
                addWord();
                current=head;
                while (current->next!=NULL){
                    current=current->next;
                };
                current->word=s;
                current->number=1;
            };
        };  
    printf("%s\n",str);
};
 
void List::show(){  //вывод на экран
    current=head;
    while(current->next!=NULL){
        printf("Word: %s/t Nubmer: %d/n",current->word, current->number);
        current->next;
    };
};
 
int main(){
    List* l=new List("e:\\example1.txt");
    l->search();
    l->show();
    getchar();
    return 0;
}
 
Текущее время: 01:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru