gpt4 book ai didi

比较字符串的结尾

转载 作者:行者123 更新时间:2023-12-04 15:28:51 24 4
gpt4 key购买 nike

我正在编写一个程序来比较不同的字符串。特别是以 OH 结尾的化学元素。如果字符串以 OH 结尾,我必须返回 -1。但是,我的程序不起作用。我哪里错了?

#include <stdio.h>
#include <string.h>

int hydroxide(char *string);

int main() {
char *string;
printf("Enter String:");
gets(string);
printf("%d", hydroxide(string));
}

int hydroxide(char *string) {
string = strrchr(string, 'O');
if (string != NULL)
return (strcmp(string, "OH"));
return (-1);
}

最佳答案

对于初学者来说,函数的逻辑是错误的。

通常这样的函数应该返回对应于逻辑true1(或正值)或对应于逻辑的0 false 当它回答“是或否”之类的问题时。

这个电话

strcmp(string, "OH")

如果两个字符串相等则返回 0。否则,函数可以返回任何正值或负值,具体取决于第一个字符串是大于还是小于第二个字符串。

除此之外,函数参数应具有限定符 const,因为传递的字符串在函数内不会更改。

您没有保留要读取字符串的内存。声明的指针

char *string;

未初始化且具有不确定的值。因此这个电话

gets(string);

调用未定义的行为。

请注意函数gets 是一个不安全的函数并且不受C 标准支持。相反,您应该使用标准 C 函数 fgets

如果功能更通用,那就更好了。那是它可以检查任何提供的字符串后缀的时候。始终尝试编写更通用的函数。在这种情况下,它们可以重复使用。

下面有一个演示程序,展示了如何定义函数。

#include <stdio.h>
#include <string.h>

int hydroxide( const char *s, const char *suffix )
{
size_t n1 = strlen( s );
size_t n2 = strlen( suffix );

return !( n1 < n2 ) && strcmp( s + n1 - n2, suffix ) == 0;
}

int main(void)
{
enum { N = 100 };
char s[N];

while ( 1 )
{
printf( "Enter a String (empty string - exit): " );

if ( fgets( s, N, stdin ) == NULL || s[0] == '\n' ) break;

s[ strcspn( s, "\n" ) ] = '\0';

printf( "%s\n", hydroxide( s, "OH" ) ? "true" : "false" );
}

return 0;
}

程序输出可能是这样的

Enter a String (empty string - exit): brogrammerOH
true
Enter a String (empty string - exit):

关于比较字符串的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61703698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com