考研题中经常会遇到给定一条英文句子,让我们对其每个单词进行操作,不同于对整型数据操作,字符串在c语言中必须存放到数组中,无形之中又给考题增加了难度
一般情况下,字符串数组都以二维数组或指针数组定义,而二维数组不能初始化为空,所以本文动态定义以指针数组为例,代码如下
#include<stdio.h>
#include<stdlib.h> //字符串数组默认可以用空格隔开!!!!
#include<string.h>
#include<malloc.h>
void main()
{
char *a[5]; //这里的5并不是每个元素的长度,而是数组长度!!!
int i,n;
printf("请输入每个字符串最大长度:");
scanf("%d",&n);
printf("请输入字符串(以空格或回车隔开):");
for(i=0;i<5;i++)
{
a[i]=(char *)malloc(sizeof(char)*n); //给每一个指针对应的字符串数组赋空间,我一开始思考过直接给所有字符串一起赋空间,发现没有办法分隔
scanf("%s",a[i]); //a[i]本来就是一个地址,不用再取地址
}
printf("倒序结果输出如下:");
for(int j=4;j>=0;j--) //倒序输出
{
printf("%s ",a[j]);
}
}
显然,c语言编译器的设计者早都意识到输入字符串数组不好分隔,所以帮我们提前定义好了可以以空格或回车分隔每个数组元素,这一点除了想要在字符串中加入空格需要自己手动添加以外,确实方便了不少。
编译结果如下: