比较字符串的大小
比较字符串的大小就是比较每一个字符的ASCII码,从第一个字符开始比较,相同则转向比较第二个,以此类推。
需要注意的是:
- 在C语言中,字符串都是保存在字符数组中的,所以在定义时要使用二维数组。(比如str[5][50],5行50列的二维数组就可以保存五个字符串,一行是一个字符串,50列是编译者自己定义的,但不建议过大,因为所占用内存太多。)
- 比较大小,常用的有选择排序法和冒泡法。
下面对二者简单比较:
(1)选择排序法:
一个元素需要与剩余所有元素在一轮中全部比较一次,需要有两个变量:1⃣️用来保存最大(小)的元素值;2⃣️保存最大(小)的元素下标。
(2)冒泡法:
有n个数排序,需要n-1趟。在第一趟中要进行n-1趟两两比较,在第j趟中要进行n-j趟两两比较。
- 编写程序时,可以用自定义函数完成,也可以通过一个主函数进行,当然,用指针也是很不错的。此处指针涉及了指针函数,即指向指针的指针,此处也可理解为指针指向了二维数组。
代码来了!
1.选择排序法
int i,j;
char str [10][50],temp[50];
printf("input\n");
for(i=0;i<10;i++)
scanf("%s",str[i]);
for(i=0;i<10;i++)
printf("%s\n",str[i]);
for (i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(strcmp(str[i],str[j])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
printf("after\n");
for(i=0;i<10;i++)
printf(“%s\n”,str[i]);
2.冒泡法
char str[10][50],temp[50];
int i,j;
printf("input ten strings\n");
for (i=0;i<10;i++)
scanf("%s",str[i]);
for (i=0;i<10;i++)
printf("%s\n",str[i]);
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (strcmp(str[j],str[j+1])<0)
{
strcpy(temp,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],temp);
}
printf("after\n");
for (i=0;i<10;i++)
printf(“%s",str[i]);
3.用指向指针的指针(指针数组)
#include <stdio.h>
#include <string.h>
int main()
{
void paixu(char (*p)[50]);
char (*p)[50],str[5][50];
int i;
for (i=0;i<5;i++)
scanf("%s",str[i]);
p=str;
printf("After compare:\n");
paixu(p);
return 0;
}
void paixu(char (*p)[50])
{
int i,j;
char temp[50];
for (i=0;i<5;i++)
for (j=0;j<5-i;j++)
if(strcmp(p[j],p[j+1])>0)
{
strcpy(temp,p[j]); //冒泡排序法
strcpy(p[j],p[j+1]);
strcpy(p[j+1],temp);
}
for(i=0;i<5;i++)
printf("%s\n",p[i]);
}