gpt4 book ai didi

将字符串转换为大写以与 C 中的用户输入进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:21 25 4
gpt4 key购买 nike

我正在尝试创建一个允许用户在文件中搜索名称的程序。该程序成功地做到了这一点,但后来我想到并不是每个人都会输入名称,因为它在文件中是大写的。也就是说,有人可能会搜索“sarah”,但由于该名称在文件中列为“Sarah”,因此找不到该名称。为了解决这个问题,我试图在比较时将两个字符串都转换为大写。我对自学 C 非常非常陌生,所以我不确定我是否正朝着正确的方向前进。在这一点上,我什至无法编译程序,因为我收到两个错误,提示“数组初始化器必须是初始化器列表或字符串文字”。我假设这意味着我的语法不仅无效而且完全错误。实现我的目标的最佳方式是什么?

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

int main(void)
{
FILE *inFile;
inFile = fopen("workroster.txt", "r");
char rank[4], gname[20], bname[20], name[20];

printf("Enter a name: __");
scanf("%s", name);
int found = 0;
while(fscanf(inFile, "%s %s %s", rank, bname, gname)== 3)
{ char uppername[40] = toupper(name[15]);
char upperbname[40] = toupper(bname[15]);
if(strcmp(uppberbname,uppername) == 0)
{
printf("%s is number %s on the roster\n", name, rank);
found = 1;
}
}

if ( !found )
printf("%s is not on the roster\n", name);

return 0;

}

最佳答案

这两行是错误的:

char uppername[40] = toupper(name[15]);
char upperbname[40] = toupper(bname[15]);

int toupper(int c); takes an int and returns an int

因为在 C 中字符串只是一个带有空终止符的字符数组,所以您可以做的是将字符串的每个字符转换为大写:

for (size_t I = 0; I < strlen(name); I++) {
uppername[I] = toupper(name[I]);
}
uppername[I] = '\0';

关于比较,可以按照提示使用strcasecmp,也就是Posix。如果只想使用 C 标准库中的函数,请按上述方法转换字符串,然后使用 strcmp

关于将字符串转换为大写以与 C 中的用户输入进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36708266/

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