我试图通过下面提供给我的程序来了解函数的返回值是如何工作的,
它是这样的:
示例如下:如果我有字符串“ 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'字符的解释而几乎立即停止,因此我尝试使用字符串,结果已实现,但我想了解或至少有一个示例,说明如何正确存储字符数组。
任何帮助或建议都将不胜感激。
答案 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;
}