Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка файла, строки, массивы , файлы 
:(
    Опции темы
girlsbest
Дата 14.12.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



условие такое  
14.    Строки текстового файла input.txt состоят из слов, разделенных одним или несколькими пробелами. Перед первым, а также после последнего слова строки пробелы могут отсутствовать. Требуется на основе исходного файла построить предметный указатель и вывести его в файл output.txt. Каждая строка предметного указателя содержит слово и номера строк текстового файла, в которых это слово встречается, разделенные одним пробелом.  
вот что получилось 
Код

#include <fstream> 
#include <string.h> 
#include <stdlib.h> 
const int maxLineLength=256; 
const int maxWordCountInSubjPointer = 1000; 
const  int countNumberLength = 3; 
const char delimiters[] = " "; 
void main() 
{ 
    int i; 
    //allocate memory 
    char* line = new char[maxLineLength];//line from input file 
    char* word = new char[maxLineLength];// separate word from the line in input file 
    //matrix of strings: word -> numbers of lines in input file 
    char*** subjectPointer = new char**[maxWordCountInSubjPointer];      
    char * numberStr = new char[countNumberLength]; 
    for(int i = 0; i < maxLineLength; ++i) 
    { 
        subjectPointer[i] = new char*[2]; 
        subjectPointer[i][0] = new char[maxLineLength]; 
        subjectPointer[i][1] = new char[maxLineLength]; 
    } 
 
    int numberOfWords = 0;//number of found unique words 
    int lineNumber = 0;//current line number in input file 
 
    //open input file 
    FILE* in; 
    FILE * out; 
    if(!(in=fopen("input.txt","w"))) 
    { 
        printf("ошибка открытия файла\n"); 
        return; 
    } 
    if(!(out=fopen("output.txt","w"))) 
    { 
        printf("ошибка открытия файла\n"); 
        return; 
    } 
    fscanf(in,"%s %d",line, maxLineLength); 
    while(!feof(in)) 
    { 
        printf("%s  %d\n",line, maxLineLength); 
        fscanf(in,"%s %d",line, maxLineLength); 
        ++lineNumber; 
        word = strtok(line, delimiters);//extract word 
        while (word != NULL) 
        { 
            bool found = false; 
            for(int i = 0; i < numberOfWords; ++i) 
            { 
                if (strcmp(word, subjectPointer[i][0]) == 0)//check if this word already exists in Pointer 
                {                     
                    itoa(lineNumber, numberStr, 10);//get string with line number 
                    bool exists = true;//check if this line number has been already added 
                    int wordLen = strlen(subjectPointer[i][1]); 
                    int numberStrLen = strlen(numberStr); 
                    for(int j =0; j < strlen(numberStr);++j) 
                    { 
                        if (subjectPointer[i][1][wordLen -j]  
                            != numberStr[numberStrLen - j]) 
                        { 
                            exists = false; 
                        } 
                    } 
                    if (!exists) 
                    { 
                        strcat(subjectPointer[i][1], " "); 
                        strcat(subjectPointer[i][1], itoa(lineNumber, numberStr, 10)); 
                        found = true; 
                    } 
                } 
            } 
            if(!found) 
            { 
                itoa(lineNumber, subjectPointer[numberOfWords++][1], 10); 
                strcpy(subjectPointer[numberOfWords][0], word); 
                 
 
            } 
            word = strtok(NULL, delimiters); 
        } 
    } 
    fclose(in); 
 
    //write results to output file 
     
    for(i = 0;i< numberOfWords; ++i) 
    { 
        fprintf(out,"%s %s\n",subjectPointer[i][0],subjectPointer[i][1]); 
         
    }     
    fclose(out); 
    //free memory 
    for(i = 0; i < maxLineLength; ++i) 
    { 
        delete[] subjectPointer[i][0]; 
        delete[] subjectPointer[i][1]; 
        delete[] subjectPointer[i];         
    } 
    delete[] numberStr; 
    delete[] subjectPointer; 
 
    delete[] line; 
    delete[] word; 
 
} 

плиз найдите ошибки...у меня выводит бесконечно полосы...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0381 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.