найти, какая строка имеет больше гласных из файла - PullRequest
2 голосов
/ 19 сентября 2019

create function int isVowel (char c) create function int vowels (char s [])

Какая строка из файла содержит наибольшее количество гласных - в случае связи, показывать только 1-й @ очевидноя должен использовать функции, описанные выше, это то, что я пытаюсь сделать, но я не совсем уверен, как на самом деле это сделать, я мог бы использовать некоторые подсказки

Я просто не совсем уверен, как это сделать

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isvowel(char c)
{
    int vowel=0;
    int i;
    int x=0;
    //for(i=0; i<5; i++){
    //  counter[i]=0;}
    for(i=0; i <c; i++)
    {
        if (c=='a' || c=='A')
            vowel++;
        else if (c=='e' || c=='E')
            vowel++;
        else if (c=='i' || c=='I')
            vowel++;
        else if (c=='o' || c=='O')
            vowel++;
        else if (c=='u' || c=='U')
            vowel++;
    }

    return vowel;
}
int main( int argc, char *argv[] )
{
    char max[1024];
    char** buff;
    int i=0 ,num = 5;
    FILE *infile;
    int lc = 0;     //counts how many lines there are
    int p;

    //asks for file name if none is supplied
    if ( argc < 2 )
    {
        printf("Must supply file name\n");
        return 1;
    }
    infile = fopen( argv[1], "r" );
    //checks to see if file opens
    if ( infile == NULL )
    {
        printf("could not open  %s\n", argv[1]);
        return 1;
    }
    buff = (char**)calloc(sizeof(max),sizeof(char));
    int k;
    for(k=0; k<num;k++){
        buff[k] = (char*)calloc(sizeof(max),sizeof(char));
    }
    while(fgets(max,sizeof(max),infile)){
        strcpy(buff[i],max);
        i++;
    }
    int x;
    for(x =1; x<i;x++){
        lc++;
        printf("%d:%s",x,buff[x]);
    }
    p = isvowel(i);
    printf("your number of vowels is:%d",p);

    return 0;
}

должен напечатать строку с большинством гласных прямо сейчас, я даже не могу заставить ее считать любые гласные

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Я бы предложил эту функцию:

int vowel(char *s, size_t len)
{
    int vowelCount = 0;
    for (int i = 0; i < len; ++i)
    {
        switch (s[i])
        {
            case 'a':
            case 'A':
            case 'e':
            case 'E':
            case 'i':
            case 'I':
            case 'o':
            case 'O':
            case 'u':
            case 'U':
            {
                ++vowelCount;
                break;
            }
        }
    }
    return vowelCount;
}

Спросите, если что-то неясно.

0 голосов
/ 19 сентября 2019

Символ гласный или нет:

int isVowel(char c) {
    switch (c) {
        case 'a':
        case 'A':
        case 'e':
        case 'E':
        case 'i':
        case 'I':
        case 'o':
        case 'O':
        case 'u':
        case 'U':
            return 1;
    }
    return 0;
}

Теперь давайте реализуем другую функцию:

int vowels(char s[]) {
    int size = strlen(s);
    int output = 0;
    for (int i = 0; i < size; i++) output += isVowel(s[i]);
    return output;
}
0 голосов
/ 19 сентября 2019

как насчет этого, во-первых, инициализируйте p в 0

int p = 0; // would be accumulated in another loop

и, изменив цикл x,

for(x =0; x<i;x++){ // start with 0 for checking from buff[0]
    lc++;
    printf("%d:%s",x,buff[x]);
    for(int y=0; y<sizeof(max); y++){ // add another loop
        p += isvowel(buff[x][y])); // revise and move here
    }
}

было бы полезно исследовать "переключатель"кейс "и" tolower "

...