我需要按字母顺序排列名称。我设法得到了所需的输出。但是,当我输入带有第一个上限的名称时,例如:Peter,输出是不同的。
EG输入:Peter Paul John Mary
EG输出:First word = John, Last word = 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]);
}
}
}
答案 0 :(得分:1)
您的方法存在一些问题:
first
,也不初始化last
:将word[i]
与未初始化的数组进行比较时,行为未定义。first
或last
,但不能同时更新两者。如果只有一个字词,first
和 last
应该只收到一个字。strcmp()
区分大小写。如果要以不区分大小写的方式确定名和姓,则必须编写更多代码。使用来自tolower()
的{{1}}可以实现一种简单的方法,但完整的解决方案需要深入理解名称整理规则,这非常复杂并且特定于语言环境。这是一种简单的方法:
<ctype.h>
答案 1 :(得分:0)
strcmp
区分大小写,因此“彼得”和“彼得”被认为是不同的。相反,您希望使用strcasecmp
,因为这会忽略字符的情况。
答案 2 :(得分:0)
从提供的代码中,不清楚如何声明和初始化与参数first
和last
对应的参数。
但无论如何,该功能不应该做到应对。
它可以看作以下方式
#include <stdio.h>
#include <string.h>
#define N 40
void findMinMaxStr( char word[][N], size_t size, char **first, char **last )
{
*first = *last = word[0];
for ( size_t i = 0; i < size; i++ )
{
if ( strcmp( word[i], *first ) < 0 )
{
*first = word[i];
}
else if ( strcmp( *last, word[i] ) < 0 )
{
*last = word[i];
}
}
}
int main(void)
{
char word[][N] = { "Peter", "Paul", "John", "Mary" };
char *first, *last;
findMinMaxStr( word, sizeof( word ) / sizeof( *word ), &first, &last );
printf( "First = \"%s\", last = \"%s\"\n", first, last );
return 0;
}
程序输出
First = "John", last = "Peter"
答案 3 :(得分:0)
将first
和last
初始化为word[0]
以及功能的开头,如下所示:
strcpy(first, word[0]);
strcpy(last, word[0]);
然后输入Peter Paul john Mary
,你会得到:
第一个字=玛丽,最后一个字=约翰
这是正确的,因为大写字母在词典上大于较低的字母。
对于Peter Paul John Mary
的输入,您应该得到:
第一个词=约翰,最后一个词=彼得
这也是正确的。