Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11730
Последний выпуск: 19.06.2015

Получить самую длинную строку файла - C (СИ)

88K
08 октября 2016 года
Tom Gilmore
2 / / 08.10.2016
Дан текстовый файл f. Получите самую длинную строку файла. Если в файле имеется несколько строк с наибольшей длиной, то получить первую из них. Нужно на СИ
88K
08 октября 2016 года
Tom Gilmore
2 / / 08.10.2016
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

typedef std::vector<std::string>::size_type vec_size;

int main() {
setlocale(0, "");
std::ifstream ifs("m.txt");
std::vector<std::string> vec;
std::string myString;
vec_size max_size = 0;
int index = 0;

if(!ifs) {
std::cerr << "Файл открыть не удалось" << std::endl;
std::cin.get();
return 1;
} else {
for(int i = 0; std::getline(ifs, myString); ++i) {
vec.push_back(myString);
if(vec.size() > max_size) {
max_size = vec.size();
index = i;
}
}
}

vec_size size = vec.size();
std::cout << "Считанные строки из файла: " << std::endl;

for(int i = 0; i != size; ++i)
std::cout << i+1 << ". " << vec << std::endl;

std::cout << std::endl << "Строка с максимальной длиной под номером " << index+1
<< std::endl << vec[index] << std::endl;

return 0;
}


PS есть эта прога на СИ++, если кто-то может помочь переделать под СИ буду благодарен)
214
10 октября 2016 года
koderAlex
1.4K / / 07.09.2005
невероятно , но кнопочку "вставить форматированный код" придумали специально для вставки кодов программ . )
1
11 октября 2016 года
kot_
7.3K / / 20.01.2000
Цитата: koderAlex
невероятно , но кнопочку "вставить форматированный код" придумали специально для вставки кодов программ . )

Удивительно! Кто бы мог подумать! )))

15K
12 октября 2016 года
xAtom
64 / / 17.01.2011
Код:
#include <stdio.h>
#include <malloc.h>
static char* readfile(const char* filename);
static char* find_maxp(char* s);


int main(void){
    char* ptr;
    char* buf = readfile("file.txt");
    if(buf == NULL)
        return 1;

    //найти макс-строку
    if((ptr = find_maxp(buf)) != NULL)
        puts(ptr);
    free(buf);
    getchar();
    return 0;
}


//чтение файла
static char* readfile(const char* filename){
    long   len;
    char*  buf;
    size_t num, cnt;
    FILE*  fp = fopen(filename, "rb");
    if(fp == NULL)
        return NULL;

    fseek(fp, 0L, SEEK_END);
    len = ftell(fp);
    if(len <= 0L){
        fclose(fp);
        return NULL;
    }

    cnt = (size_t)len;
    buf = (char*)malloc(cnt + sizeof(char));
    if(buf == NULL){
        fclose(fp);
        return NULL;
    }

    fseek(fp, 0L, SEEK_SET);
    num = fread(buf, sizeof(char), cnt, fp);
    if((num != cnt) || (ferror(fp) != 0)){
        fclose(fp);
        free(buf);
        return NULL;
    }
    buf[num] = '\0';
    return buf;
}

//макс-строка
static char* find_maxp(char* s){
    size_t n = 0, m = 0;
    char*  p = NULL;
    do {
        if(!*s || (*s == '\r') || (*s == '\n')){
            if(n > m){
                m = n;
                p = s - n;
            }
            n = 0;
        } else
            ++n;
    } while(*s++ != '\0');

    if(p != NULL)
        *(p + m) = '\0';
    return p;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог