c - 了解返回值函数 C

标签 c arrays function char

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

它是这样的:

  • 编写一个函数,给定一个字符数组 v 及其 dim,返回按字母顺序排列的下一个字母后面出现次数较多的大写字母。

示例如下:如果我有字符串“B T M N M P S T M N”,函数将返回 M(因为两次后跟 N)。

我想到了以下内容来创建函数:

由于 ASCII 代码,我将把插入到数组中的字符视为整数,因此我将创建一个返回整数的 int 函数,但我将像 char 一样打印;这是我希望做的,

我想我做到了,因为函数使用字符串 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;
}

附言

我无法在 for scanf("%c,&v[i]) 或 getchar() 中插入数组的值,因为程序几乎立即停止'\n' 一个字符,所以我尝试使用字符串,取得了结果,但我想了解或至少有一个关于如何正确存储字符数组的示例。

如有任何帮助或提示,我们将不胜感激。

最佳答案

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

关于c - 了解返回值函数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031158/

相关文章:

c - 从 "char"到 "char *"的转换无效

c - C 中的书面文本文件为空且不显示任何字符

c - 如何扫描n个整数行?

javascript - 将普通数组转换为html中的对象数组

python - Python中符号数组的指数评估

Javascript:返回带有预定义参数的函数

c - 冒泡排序无法编译c

c - 在 C 中输出方程

c - C中的完全动态字符串数组

function - 函数中 EXISTS 子句的性能不佳