理解返回值函数C



我正试图通过下面给我的程序来理解函数的返回值是如何工作的

它是这样的:

  • 编写一个函数,给定一个字符v及其dim的数组,返回大写字母,通常后面跟着字母顺序的下一个字母

示例如下:如果我有字符串"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;
}

p.S

我无法在forscanf("%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 %cn",maxvolte(v,dim));
return 0;
}
#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;
}

最新更新