了解返回值函数C

时间:2018-10-28 11:47:15

标签: c arrays function char

我试图通过下面提供给我的程序来了解函数的返回值是如何工作的,

它是这样的:

  • 编写一个函数,该函数给定一个字符数组v和它的暗号,返回大写字母,该字母通常以字母顺序跟在下一个字母之后。

示例如下:如果我有字符串“ B T M N M P S T M N”,该函数将返回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

我无法在scanf("%c,&v[i])或getchar()的a中插入使用数组的值,因为该程序由于对'\ n'字符的解释而几乎立即停止,因此我尝试使用字符串,结果已实现,但我想了解或至少有一个示例,说明如何正确存储字符数组。

任何帮助或建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

有几件事,我认为您做对了。 首先,您需要考虑有满足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;
}

答案 1 :(得分:-1)

#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;
}