一、题目
萨博有 N 个毛绒玩具,萨博给他们都起了名字。每个毛绒玩具的名字都不超过 40 个字符。 萨博想把这些毛绒玩具的“名字”倒过来,并将倒过来后的“名字”按照字典序排序。
二、输入输出格式
输入
第一行是一个整数 N( 0<N≤3 )表示萨博的毛绒玩具数。
之后的 N 行,每行有一个字符串,是萨博的某一个毛绒玩具的名称。
输出
输出有 N 行,是所有毛绒玩具倒过来后的“名字”按照字典序排序后的结果。
输入样例
4
Tommy
Cat
Airman
Spider
输出样例
namriA
redipS
taC
ymmoT
三、实现
代码
#include <stdio.h>
#include <string.h>
int main()
{
int N;
scanf("%d", &N);
char name[N][41];
memset(name, 0, sizeof(name));
for (int i = 0; i < N; i++)
{
scanf("%s", &name[i][0]);
}
for (int i = 0; i < N; i++)
{
char temp[41];
int len;
len = strlen(&name[i][0]); //二维数组中第i个元素的长度
memset(temp, 0, sizeof(temp));
for (int j = len - 1; j >= 0; j--)
{
temp[len - 1 - j] = name[i][j];
}
strcpy(&name[i][0], temp);
//printf("%s\n", &name[i][0]);
}
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
char temp2[41];
memset(temp2, 0, sizeof(temp2));
if (name[i][0] > name[j][0])
{
strcpy(temp2, &name[i][0]);
strcpy(&name[i][0], &name[j][0]);
strcpy(&name[j][0], temp2);
}
}
printf("%s\n", &name[i][0]);
}
return 0;
}
四、总结
以上题为例
二维数组:
char name[N][41];
//N 是名字个数,41是给每个名字分配的内存空间(字节)
其中第 i 个名字的长度为:(二维数组中某个元素的长度)
len = strlen(&name[i][0]);
二维数组的初始化:
memset(name, 0, sizeof(name));