我试图通过提供给我的以下程序来理解函数的返回值是如何工作的,
它是这样的:
- 编写一个函数,给定一个字符数组 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/