gpt4 book ai didi

c - 字符串 - 名字和姓氏按字母顺序排列,大写字母

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:50 28 4
gpt4 key购买 nike

我需要按字母顺序相应地排列名称。我设法获得了所需的输出。但是,当我用第一个大写字母键入名称时,例如:Peter,输出是不同的。

EG 输入:Peter Paul John Mary

EG 输出:第一个词 = John,最后一个词 = d

但是当我用小写字母打字时,输出是完美的。

这是我的代码:

void findMinMaxStr(char word[][40], char *first, char *last, int size);

int main() {
char word[SIZE][40];
char first[40], last[40];
int i, size;

printf("Enter size: \n");
scanf("%d", &size);
printf("Enter %d words: \n", size);
for (i = 0; i < size; i++)
scanf("%s", word[i]);

findMinMaxStr(word, first, last, size);
printf("First word = %s, Last word = %s\n", first, last);
return 0;
}

void findMinMaxStr(char word[][40], char *first, char *last, int size) {
/* Write your program code here */
int k, l;

for (k = 0; k < size; k++) {
if (strcmp(word[k], last) > 0) {
strcpy(last, word[k]);
} else
if (strcmp(word[k], first) < 0) {
strcpy(first, word[k]);
}
}
}

最佳答案

您的方法存在一些问题:

  • 你没有初始化first , 也不 last :比较word[i]未初始化的数组具有未定义的行为。
  • 你只更新firstlast ,但不是两者。如果只有一个字,first last应该收到唯一的词。
  • strcmp()区分大小写。如果要以不区分大小写的方式确定名字和姓氏,则必须编写更多代码。使用 tolower() 可以实现一种简单的方法来自 <ctype.h>但完整的解决方案需要深入了解名称整理规则,这非常复杂且特定于区域设置。

这是一个简单的方法:

#include <ctype.h>

int strcasecmp(const char *s1, const char *s2) {
for (;;) {
unsigned char c1 = tolower((unsigned char)*s1++);
unsigned char c2 = tolower((unsigned char)*s2++);
if (c1 != c2) {
return c1 < c2 ? -1 : 1;
}
if (c1 == '\0') {
return 0;
}
}
}

void findMinMaxStr(char word[][40], char *first, char *last, int size) {
int k;

*first = *last = '\0';
if (size > 0) {
strcpy(first, word[0]);
strcpy(last, word[0]);
for (k = 1; k < size; k++) {
if (strcasecmp(last, word[k]) < 0) {
strcpy(last, word[k]);
} else
if (strcasecmp(first, word[k]) > 0) {
strcpy(first, word[k]);
}
}
}
}

关于c - 字符串 - 名字和姓氏按字母顺序排列,大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46305396/

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