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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Работа с текстовыми файлами 
:(
    Опции темы
tema462
Дата 13.1.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 

Задан текстовый файл из этого файла нужно сформировать массив слов и сортировать массив слов с соответствием кол-ва букв по убыванию! 
Помоги плз студенту сдать экзамен! smile  smile 

Это сообщение отредактировал(а) tema462 - 13.1.2007, 22:56
PM MAIL ICQ   Вверх
Xenon
Дата 13.1.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



[UPDATE]
Млин, про сортировку забыл ... Сейчас ...
[UPDATE2]
Код

#include <cstring>
#include <vector>

using std::string;

typedef std::vector<string> WordArr;

void Get_Words (FILE* file,WordArr& arr)
{
    string word;
    char ch;
    while (!feof(file))
    {
        fread(&ch,1,1,file);
        if (ch==' ')
        {
            arr.push_back(word);
            word.clear();
        }
        else
        {
            word+=ch;
        }
    }
}

int main(int argc, char* argv[])
{
    char path[256];
    printf("Enter Path to file: ");
    scanf("%s",path);
    FILE* file;
    file=fopen(path,"r");
    WordArr arr;
    Get_Words(file,arr);
    for (int j=1,i=0;j<arr.size();j++)
    {
        string temp=arr[j];
        for (i=j-1;i>=0 && (strcmp(arr[i].c_str(),temp.c_str())>0);i--)
        {
            arr[i+1]=arr[i];
        }
        arr[i+1]=temp;
    }
    for (int i=0;i<arr.size();i++)
    {
        printf("%s ",arr[i].c_str());
    }
    return 0;
}


Это сообщение отредактировал(а) Xenon - 14.1.2007, 00:24


--------------------
user posted image  
PM MAIL   Вверх
tema462
Дата 14.1.2007, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У мя етсь тут пару идей:
1)3 функции поиск, сортировка, вывод на экран
2)поиск 2 цикла вложенных один по пробелу реагирует другой забрасывает символы в служебный массив
3)сортировка вложенный цыкл сравнивает служебный массив с списком слов в конечном массиве, а внешний сортирует массив слов 
4)функция выводит на эран список слов из массива ВСЕ!
Если кто подхватит идеи или свои придумает, я не уверен что они правильные всмысле свои, и напишет прогу на СИ, буду очень благодарен!

Добавлено @ 01:32 
 smile 
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 14.1.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



 smile 
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define len 100 // максимальная длинна читаемых слов из файла

int read_string( FILE * file, char *** matrix ); // чтение слов из потока
void write_string( FILE * file, const char ** matrix, int size ); // вывод слов в поток
void sort_string( const char ** matrix, int size ); // сортировка

////////////////////////// MAIN /////////////////////////////
int main(){
    FILE * file = fopen( "text.txt", "r" ); // открываем файл с текстом
    if( !file )
        puts("Error open file !");
    else{
        char ** str;
        int size = read_string( file, &str );
        sort_string((const char**) str, size );
        write_string( stdout, (const char**) str, size );
    }
    puts("\n\n\nPress key Enter no continue");
    getchar(); // пауза
    return 0;
}
///////////////////// END MAIN /////////////////////////

//// чтение //////////////
int read_string( FILE * file, char *** matrix ){
    char buf[len]; // сюда читаем слово из файла
    int size = 0; // количество слов в массиве
    int max_size = 10;
    *matrix = (char**) calloc ( max_size, sizeof(char*));

    while( fscanf( file, "%s", buf ) >0 ){
        if( size >= max_size ){ // если нехватило памяти
            max_size += 10; // ещё 10 слов
            char ** mas = (char**) malloc ( max_size*sizeof(char**)); // увеличенный массив
            memcpy( mas, *matrix, sizeof(char*)*(max_size-10)); // копируем адреса строк
            free( *matrix ); // удаляем старые адреса
            *matrix = mas; // увеличили массив на 10 слов
        }

        char * m = (char*) malloc ( strlen( buf )+1 );
        (*matrix)[size] = m;
        strcpy( (*matrix)[size], buf );
        size++;
    } // end read string

    *matrix = (char**) realloc ( *matrix, size*sizeof(char*)); // урезаем массив до количесва слов    
    return size;
}
//////// вывод /////////
void write_string( FILE * file, const char ** matrix, int size ){
    int i;
    for( i=0; i<size; i++ )
        fprintf( file, "%s\n", matrix[i] );
}
////// сортировка /////////
void sort_string( const char ** matrix, int size ){
    int i, j;
    const char * str;
    for ( i=0; i < size; i++){
        str = matrix[i];
        size_t a = strlen( str );
        for( j=i-1; j>=0 && strlen( matrix[j] ) > a; j-- )
            matrix[j+1] = matrix[j];
        matrix[j+1] = str;
    }
}


Это сообщение отредактировал(а) Oleg_Ci - 14.1.2007, 09:06
PM MAIL   Вверх
Xenon
Дата 14.1.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Oleg_Ci, в C есть String?..


--------------------
user posted image  
PM MAIL   Вверх
tema462
Дата 14.1.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Xenon @ 14.1.2007,  14:50)
Oleg_Ci, в C есть String?..

да есть! smile 
PM MAIL ICQ   Вверх
tema462
Дата 14.1.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Oleg_Ci @ 14.1.2007,  08:44)
smile 
Код

    *matrix = (char**) calloc ( max_size, sizeof(char*));


что это такое? smile 
PM MAIL ICQ   Вверх
Xenon
Дата 14.1.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну тогда в моем примере надо было лишь вектор выкинуть smile А я-то думал ...


--------------------
user posted image  
PM MAIL   Вверх
tema462
Дата 14.1.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



FILE * file = fopen( "text.txt", "r" ); // открываем файл с текст
Здесь нужно нисать адрес тестового файла,вместо ("text.txt", "r") smile 
PM MAIL ICQ   Вверх
Xenon
Дата 14.1.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



tema462, эээ? Можешь вставить переменную, вместо конкретного имени


--------------------
user posted image  
PM MAIL   Вверх
tema462
Дата 14.1.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



что куда встватиь?
Цитата

FILE * file = fopen( "text.txt", "r" ); // открываем файл с текст
Здесь нужно нисать адрес тестового файла,вместо ("text.txt", "r")   

ты про это smile

Добавлено @ 21:35 
Xenon, а ты в аське сидишь ваще? smile 
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 17.1.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Я два дня не мог на форум попасть, что-то здесь ремонтировали наверное, у меня не отображалась "кнопка отправить" и не мог ничего написать.
 smile хотя другие писали посты почему-то, а у меня проблемы...
Цитата
 в C есть String?

класса string конечно нету, а затоловок <string.h> есть, с функциями для char* -строк.
Код

*matrix = (char**) calloc ( max_size, sizeof(char*));

Тут выделяем память для указателей на строки, кождый указатель будет указывать на начало строки smile 
Цитата(tema462 @  14.1.2007,  21:47 Найти цитируемый пост)
FILE * file = fopen( "text.txt", "r" ); // открываем файл с текстЗдесь нужно нисать адрес тестового файла,вместо ("text.txt", "r")   smile 

к сожалению что такое -> "адрес тестового файла" я не знаю...
PM MAIL   Вверх
_mortar89
Дата 4.4.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, проблема такая, делаю программу шифрования и есть необходимость удалить определенное количество символов с конца текста, пример: "пользователь вводит -10" и 10 символов должно удалится с конца текста. Вот выкладываю кусок  кода, что не так в нем?

Код


 if(End<0){
     for( i=End; i<0; i++){
         Byte = fgetc(fpInput);
          Byte=Byte-1;
       }
     }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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