Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Глеб Грицкевич
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 22
1

Определить в файле два первых слова по алфавиту

19.12.2009, 11:52. Просмотров 473. Ответов 2
Метки нет (Все метки)

всем привет. пишу программу. определяю в файле два первых слова по алфавиту.
посмотрите, пожалуйста, правильно ли я определил второе слово (или моё "решение" мягко говоря не очень)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    
    int n=0;
    FILE *f=NULL;
    if(argc<2) {printf("Error!\n"); return 1;}
    f = fopen(argv[1],"r");
    if(!f) {printf("file ne naiden!\n"); return 1;}
    while (!feof(f)) {
        char str[101], min1[51] = "", min2[51]="";  
        if(1 != fscanf(f,"%s",str)) break;
        for(int i=0;i<n;i++){
            if(min1[0] == 0) strcpy(min1,str);
            if(strcmp(min1,str)>0) strcpy(min1,str);
        }printf ("%s\n",min1);
        for(int i=0;i<n;i++){
            if(min2[0] == 0) strcpy(min2,str);
            if((strcmp(min2,str)>0) && (strcmp(min1,min2)!=0))
                strcpy(min2,str);
        }
        printf ("%s\n",min2);
    }
    fclose(f);
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2009, 11:52
Ответы с готовыми решениями:

Определить два слова, являющиеся первыми в алфавитном порядке среди всех слов в файле
Файл содержит слова. Определить два слова, являющиеся первыми в алфавитном порядке среди всех слов...

Найти два самых коротких слова в файле
Люди добрые, подскажите. Пожалуйста :) Вроде бы как задача сделана, компиляция проходит, но не...

Два слова по алфавиту.
С клавиатуры вводят 2 слова. Составьте программу, которая распологает их в алфавитном порядке.

Упорядочить слова в файле по алфавиту
Дан файл, компонентами которого являются слова из латинских букв. Упорядочить слова в файле по...

Отсортировать слова в файле по алфавиту и сохранить в файл
дан текстовый файл необходимо отсортировать слова по алфавиту и записать в файл Добавлено через 1...

2
Aye Aye
370 / 284 / 97
Регистрация: 17.12.2009
Сообщений: 567
19.12.2009, 13:45 2
В 14 строчке for(int i=0;i<n;i++) , а ведь n равно нулю, цикл не запустится.
И не очень понятно что по заданию требуется. "Определять два первых слова в файле по алфавиту" - это определять нацинаются ли они с первых букв алфивита a,b,c... или нет?
0
easybudda
Модератор
Эксперт CЭксперт С++
10255 / 6143 / 1547
Регистрация: 25.07.2009
Сообщений: 11,696
19.12.2009, 15:49 3
Глеб Грицкевич, По этой логике хорошо одну строку искать. Если строк несколько, алгоритм становится довольно запутанным. Проще в массив слова прочитать и отсортировать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define WORDS_NEEDED 2
#define WRD_MAX 255
 
/* Вывод двух лексикографически меньших слов из файла, если указан, или из stdin */
 
int wordCmp(const void *a, const void *b){
    return strcmp(*(char**)a, *(char**)b);
}
 
int main(int argc, char **argv){
    char **words, buf[WRD_MAX];
    FILE *f;
    size_t count, i;
    
    if ( argc > 1 ){
        if ( ( f = fopen(argv[1], "r") ) == NULL ){
            fprintf(stderr, "%s: can't open input file %s\n", argv[0], argv[1]);
            exit(1);
        }
    }
    else
        f = stdin;
        
    words = NULL;
    count = 0;
        
    /* Не лучший способ читать слова из файла! Только, как учебный пример */
    while ( fscanf(f, "%s", buf) == 1 ){
        if ( ( words = (char**)realloc(words, sizeof(char*) * (count + 1)) ) == NULL ){
            fprintf(stderr, "%s: memory error!\n", argv[0]);
            exit(1);
        }
        if ( ( words[count] = strdup(buf) ) == NULL ){
            fprintf(stderr, "%s: memory error!\n", argv[0]);
            exit(1);
        }
        ++count;
    }
    if ( ferror(f) || !words ){
        fprintf(stderr, "%s: file %s is bad or empty!\n", argv[0], argv[1]);
        exit(1);
    }
    
    qsort((void*)words, count, sizeof(char*), wordCmp);
    for ( i = 0; i < WORDS_NEEDED; ++i )
        printf("%s\n", words[i]);
    
    fclose(f);
    for ( i = 0; i < count; ++i )
        free(words[i]);
    free(words);
    exit(0);
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2009, 15:49

В исходной строке определить и вывести слова, перед которыми стоят младшие по алфавиту слова
Очень прошу вас ребята , помоч мне . Препод дал мне 2 задачки , которые я вообще не понимаю, пройдя...

В исходной строке а$ определить и вывести слова, перед которыми стоят младшие по алфавиту слова
Задача 1. В исходной строке а$ определить и вывести слова, перед которыми стоят младшие по...

Перечислить по алфавиту все зарезервированные слова используемые в файле
Необходимо перечислить по алфавиту все зарезервированные слова, используемые в файле, и указать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru