Получить самую длинную строку файла - C (СИ)
Дан текстовый файл f. Получите самую длинную строку файла. Если в файле имеется несколько строк с наибольшей длиной, то получить первую из них. Нужно на СИ
#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 есть эта прога на СИ++, если кто-то может помочь переделать под СИ буду благодарен)
невероятно , но кнопочку "вставить форматированный код" придумали специально для вставки кодов программ . )
Цитата: koderAlex
невероятно , но кнопочку "вставить форматированный код" придумали специально для вставки кодов программ . )
Удивительно! Кто бы мог подумать! )))
Код:
#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;
}
#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;
}