Понимание возвращаемых значений функций C - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь понять, как работает возвращаемое значение функции, с помощью следующей программы, которая была мне дана,

Это выглядит так:

  • Записьфункция, которая задает массив символа v и его dim, возвращает заглавную букву, за которой чаще всего следует следующая буква в алфавитном порядке.

И пример выглядит так: если у меня есть строка "BTMNMPSTMN", функция вернет M (потому что два раза сопровождается N).

Я подумал следующеесоздайте функцию:

Я буду считать символ, вставленный в массив, целочисленным, благодаря коду ASCII, поэтому я собираюсь создать функцию int, которая возвращает целое число, но я собираюсь напечатать какобугливается;то, что я надеялся сделать,

И я думаю, что сделал, потому что со строкой BTMNMPSTMN функция печатает M, но, например, со строкой ABDPE функция возвращает P;это не то, что я хотел, потому что должен возвращать 'A'.

Я думаю, что я неправильно понимаю что-то в моем коде или в возвращаемом значении функций.

Код выглядит следующим образом:

#include <stdio.h>
int maxvolte(char a[],int DIM) {    
    int trovato;
    for(int j=0;j<DIM-1;j++) {
        if (a[j]- a[j+1]==-1) {
            trovato=a[j];
        }   
    }
    return trovato;
}

int main()
{
    int dim;
    scanf("%d",&dim);
    char v[dim];
    scanf("%s",v);
    printf("%c",maxvolte(v,dim));
    return 0;
}

PS

Мне не удалось вставить значение массива с помощью в for scanf("%c,&v[i]) или getchar (), потому чтопрограмма останавливается практически сразу из-за интерпретации символа '\ n', поэтому я попытался использовать строки, результат был достигнут, но я хотел бы понять или, по крайней мере, иметь пример того, как правильно хранить массив символов.

Любая помощь или совет будут оценены.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018
#include <stdio.h>

int maxvolte(char a[],int DIM) { 
    int hold;
    int freq;
    int max =0 ;
    int result;
    int i,j;

    for(int j=0; j<DIM; j++) {

       hold = a[j]; 
       freq = 0;

       if(a[j]-a[j+1] == -1) {
           freq++;
       }

       for(i=j+1; i<DIM-1; i++) {       //search another couple
           if(hold==a[i]) {
              if(a[i]-a[i+1] == -1) {
                freq++;
              }
           }
       }

       if(freq>max) {       
            result = hold;
            max=freq;
       }       
}
    return result;
}

int main()
{
    char v[] = "ABDPE";
    int dim = sizeof(v) / sizeof(v[0]);
    printf("\nresult : %c", maxvolte(v,dim));
    return 0;
}
0 голосов
/ 28 октября 2018

Есть несколько вещей, я думаю, вы не поняли это правильно.Для начала нужно учесть, что существует несколько пар символов, удовлетворяющих a[j] - a[j+1] == -1.Во-вторых, вы предполагаете, что любой вход будет генерировать правильный ответ.Такой пары вообще не может быть, например, ACE в качестве входных данных.

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

#include <stdio.h>
#include <assert.h>
int maxvolte(char a[],int DIM) {
    int count[26] = {0};

    for(int j=0;j<DIM-1;j++) {
        if (a[j] - a[j+1]==-1) {
            int index = a[j] - 'A'; // assume all input are valid, namely only A..Z letters are allowed
            ++count[index];
        }
    }

    int max = -1;
    int index = -1;
    for (int i = 0; i < 26; ++i) {
        if (count[i] > max) {
            max = count[i];
            index = i;
        }
    }

    assert (max != -1);
    return index + 'A';
}

int main()
{
    int dim;
    scanf("%d",&dim);
    char v[dim];
    scanf("%s",v);
    printf("answer is %c\n",maxvolte(v,dim));
    return 0;
}
...