【发布时间】:2019-12-14 15:56:57
【问题描述】:
我正在尝试通过 strcmp 使用具有相同单词的不区分大小写的数组按字母顺序对区分大小写的单词数组 words[number of words][number of letters] 进行排序。当我使用不区分大小写的数组对不区分大小写的数组进行排序并打印它时,它可以工作,但是如果我尝试使用不区分大小写的数组对区分大小写的数组进行排序 - 它不会。以下是我用来执行此操作的代码块。
char cs_sns[20][20];
///scan here as you wish/////
char cs_ins[20][20];
for(int i = 0; i < 20; i++)
{
strcpy(cs_ins[i], cs_sns[i]);
}
//////////////////CONVERT///////////////////////////
for(int i = 0; i < 20; i++)
{
strlwr(cs_ins[i]);
}
/////////////////SORT_CASE_SENSITIVE_BY_LOWERCASE/////////////////////
for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20-1; i++)
{
int x = (strcmp(cs_ins[i], cs_ins[i+1]) > 0);
if (x == 1)
{
char temp[20];
strcpy(temp, cs_sns[i]);
strcpy(cs_sns[i], cs_sns[i+1]);
strcpy(cs_sns[i+1], temp);
}
}
}
/////////////////////SORT_LOWERCASE_BY_LOWERCASE/////////////////
for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20 - 1; i++)
{
int x = (strcmp(cs_ins[i], cs_ins[i+1]) > 0);
if (x == 1)
{
char temp[20];
strcpy(temp, cs_ins[i]);
strcpy(cs_ins[i], cs_ins[i+1]);
strcpy(cs_ins[i+1], temp);
}
}
}
///////////////PRINT/////////////////
for (int i = 0; i < 20; i++)
{
printf("%s\n", cs_sns[i]); //////////swap with cs_ins[i] and see what happens
}
下面是偷来的函数strlwr转小写。
///////////define strlwr/////////////////////
char *strlwr(char *str)
{
unsigned char *p = (unsigned char *)str;
while (*p)
{
*p = tolower((unsigned char)*p);
p++;
}
return str;
}
您需要为tolower 包含ctype.h。
我错过了什么? 谢谢。
编辑:可以通过 stricmp 解决,这是一个链接: C99 remove stricmp() and strnicmp()?
还是很好奇……
【问题讨论】:
-
你知道
stricmp函数吗?它进行不区分大小写的比较。 -
@Youssef13
stricmp()不在标准 C 库中。 -
您正在使用变量
pos- 这是在哪里定义的以及它设置为什么? -
您不必在交换时复制整个字符串。只需交换数组中的指针即可。
-
另外,您的第一个排序循环是比较
cs_ins的元素,但交换cs_sns的元素。