计算机二级-C语言-程序填空题-190109记录-对二维字符串数组的处理
//给定程序,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长<N。
//重难点:先把第一个字符串记录为最长,然后再遍历替代最长的。处理二维字符串数组需要双重循环,循环处理的时候什么时候‘+1’什么时候不加。
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
void fun(char (*ss)[N])
{
int i,j,n,len=0;
for(i=0;i<M;i++)
{
n=strlen(ss[i]);
if(i==0) len=n;//先记录第一个字符串为最长
if(n>len) len=n;//遍历,寻找最长的
}
for(i=0;i<M;i++)
{
n=strlen(ss[i]);
for(j=0;j<len-n;j++)
ss[i][n+j]='*';//注意是否+1
ss[i][n+j+1]='\0';//这里加一,因为for循环中,判断到第二个条件不成立,那么最后一次j++就不会执行。
}
}
main()
{
char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("The original string are :\n");
for(i=0;i<M;i++) printf("%s\n",ss[i]);
printf("\n");
fun(ss);//传参,二维数组名(首地址)
printf("The result is:\n");
for(i=0;i<M;i++) printf("%s\n",ss[i]);//二维字符串数组,输出的时候,只需要一个for循环
}