先看代码
//创建二维数组存放字符串
//用strcmp()函数函数去给字符串排序
#include<stdio.h>
#include<string.h>
int main()
{
char s[9][100];
int i = 0, j = 0;
char tmp[10];
//将数据输入到二维数组中
for (i = 0; i < 9; i++)
{
scanf("%s", s[i]);//数组名就是地址,再用&s就是地址的地址
}
//打印排序前的字符串
printf("排序前的字符串:\n");
for (i = 0; i < 9; i++)
printf("%s\n", s[i]);
i = 0;
while (i < 9)
{
for (j = i + 1; j < 9; j++)
{
if (strcmp(s[i], s[j]) > 0)
{
strcpy(tmp, s[i]);
strcpy(s[i], s[j]);
strcpy(s[j], tmp);
}
}
i++;
}
//打印排序后的字符串
printf("排序后的字符串:\n");
for (i = 0; i < 9; i++)
printf("%s\n", s[i]);
return 0;
}
从这个系列开始,我们已经一起完成了不少题了,现在的感觉应该就是拿到一道基础编程题,自己是能够在快速的想到解决问题的方法,难点在于对编程语言语法点的掌握,以及对易错细节的处理。往往我们做感觉自己很快能做好的题,在细节上出错后,调试找BUG的环节会变得异常急躁。但为了成为一名出色的killer,一定要在这种时候保持冷静和理性。(一点碎碎念)
疑点:
-
将数据存储到字符串数组中
可以使用scanf()函数,格式限定为“%s”(有同学可能会误写成“%c”)
for (i = 0; i < 9; i++)
{
scanf("%s", s[i]);//数组名就是地址,!!!不用写“&”
}
还可以使用gets()函数,gets()函数原型
char * gets ( char * str ),所以在读取数组的时候应该这样写
for (i = 0; i < 9; i++)
{
gets(s[i]);
}
-
在字符串数组中,交换数据使用strcpy
通常,我们习惯于使用整形的数组类型进行交换,就是大家熟知的“有两个瓶子一个装油,一个装醋......”所以就出现了下面这种写法
{
char temp;
temp = s[i];
s[i] = s[i+1];
s[i+1] = temp;
}
当时自己检查的时候看到这个东西(内心:“F**K”,这是什么东西?)
但其实后面学到了C++了解到了string类之后就会惊喜的发现这样也是可行的。