#include <stdio.h>
#include <stdlib.h>
#define can 100
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void hesaplacumle(int *sayi,char dizi[can])
{
*sayi=strlen(dizi);
printf("Karakter dizimin boyu: %d\n",*sayi);
}
void ortakhesap(int *ortak,char dizi1[can])
{
*ortak=0;
int i=0;
int konum=0;
int num1[26]={0};
int num2[26]={0};
while(dizi1[i])
{
if(dizi1[i]==32)
{
break;
}
else if(dizi1[i]>96 && dizi1[i]<123)
{
konum=dizi1[i]-'a';
num1[konum]++;
}
i++;
}
i+=1;
while(dizi1[i])
{
if(dizi1[i]>96 && dizi1[i]<123)
{
konum=dizi1[i]-'a';
num2[konum]++;
}
else{
break;
}
i++;
}
for(i=0;i<26;i++)
{
if(num1[i]!=0 && num2[i]!=0)
{
*ortak++;
}
}
printf("2 kelimenin ortak harf sayisi: %d",*ortak);
}
int main(int argc, char *argv[])
{
int ortak;
char dizi[100];
char dizi1[100];
int sayi;
printf("\nLutfen bir cumle giriniz: \n");
gets(dizi);
hesaplacumle(&sayi,dizi);
printf("\nLutfen iki kelime giriniz: \n\n");
gets(dizi1);
ortakhesap(&ortak,dizi1);
}
字符串
hesapracumle(&sayi,dizi);我期望从这个函数得到完全相同的输出,这是可以的。然而,ortakhesap(& ortak,dizi 1);当我不使用函数时,它可以正常工作。另一方面,当我使用函数时,它会产生同样荒谬的输出,我不明白。这里我的问题是我错过了什么?主要是用称呼的方法。谢谢你的帮助。欠我的敬意。
hesaplacumle(&sayi,dizi)这一个计算长的句子。return(>);该计算器计算两个字之间的公共字符数。x1c 0d1x的数据
1条答案
按热度按时间tktrz96b1#
函数
ortakhesap()
的问题在这里:字符串
您打算递增
ortak
所指向的int
,但后缀++
的优先级高于一元运算符*
,因此您将递增指针本身,然后解引用它并丢弃值。你可以通过插入括号来达到你的目的...型
...或使用加号而不是递增运算符...
型
然而,更好的方法是使用函数的返回值而不是out参数,或者至少使用一个局部变量来累积计数,并在最后只设置
*ortak
一次。