условие такое 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; }
|
плиз найдите ошибки...у меня выводит бесконечно полосы...
|