我想知道在哪里写一个函数,给定一个字符串,如果所有字符都不同,则返回TRUE,如果重复任何字符,则返回FALSE。
#include <stdio.h>
char distinct_or_not_string(char *string []);
int main()
{
char str[20];
char result;
printf("please entre your string:");
gets(str);
printf("\n");
result=distinct_or_not_string(str);
}
char distinct_or_not_string(char *string [])
{
int i=0,j;
while(string[i]!='\0')
{
j=i+1;
while(string[i]!='\0')
{
if(string[i]==string[j])
{
return printf("false");
}
j++;
}
i++;
}
return printf("true");
}
您的代码有四个问题。
gets
从中捕获字符串stdin
。永远不要使用gets
。由于安全原因不建议使用它,因为这样,当输入字符串比缓冲区本身长时,您很容易遇到缓冲区溢出。gets
不要停止扫描。使用fgets
代替,它根据缓冲区的大小限制输入:
fgets(str, sizeof str, stdin);
distinct_or_not_string()
:char distinct_or_not_string(char *string []);
string
是类型,char **
但您想将指针传递给字符串。二者必选其一char string[]
或char *string
其中string
的类型的char *
。
i
而不是j
:while(string[i]!='\0')
printf
作为的返回值distinct_or_not_string()
:return printf("false");
printf()
将始终被评估为1
(假设在打印时未发生错误),因此result
在main
函数中,1
无论字符串是否具有两次或多次以上的字符,该函数将始终具有,这是不合适的。
将两者分开,然后将每个语句分开:
printf("false");
return 0;
和
printf("true");
return 1;
旁注:distinct_or_not_string()
不需要返回char
;在这种情况下,返回值与字符串或字符无关。
因此distinct_or_not_string()
,在我看来,返回类型最好是int
更好的可读性和避免混淆,尽管使用它不是语法错误char
。函数的声明将如下所示:
int distinct_or_not_string(char *string);
更正后的代码应如下所示:
#include <stdio.h>
int distinct_or_not_string(char* string);
int main()
{
char str[20];
int result;
printf("please enter your string: ");
char *p = fgets(str,sizeof str,stdin);
if(p == NULL)
{
printf("Error occurred at reading the input!");
return 1;
}
printf("\n");
result = distinct_or_not_string(str);
return 0;
}
int distinct_or_not_string(char *string)
{
int i=0,j;
while(string[i] != '\0')
{
j=i+1;
while(string[j] != '\0')
{
if(string[i] == string[j])
{
printf("false");
return 0;
}
j++;
}
i++;
}
printf("true");
return 1;
如果要在线测试此代码,请访问以下链接:https : //onlinegdb.com/H1PCstoSL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句