字符串数组 1. 字符串数组的定义与使用
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[15];
printf("input a string:");
scanf("%s",abc);
printf("%s",abc);
}
当输入是abc124a时输入输出如下表示: input a string:abc124a abc124a
当输入是123 abc时输入输出如下表示: input a string:123 abc 123 注意:把一个字符数组看成字符串后,可以直接使用%s来输入输出,后面直接使用数组名。 用%s读入时,表示需要读入一个字符串到字符数组中,遇到第一个空格或回车,读入即停止。读入时还需要特别注意的是定义的字符数组的长度应该要大于读入数据的长度。 用%s输出时,要注意的是输出的是字符串的实际长度的那些字符,而不是输出定义时的字符数组的长度。如:
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[5];
int i;
abc[4]='K';
printf("input a string:");
scanf("%s",abc);
printf("%s",abc);
}
输入输出如下: input a string:2q 2q
这个例子中,abc[]数组的第五个元素是’k’字符,但是读入这个字符串时只用到了2个元素,即 abc[0]=2 abc[1]=q 而%s输出时仅仅输出了2q这两个字符,那么字符串输出是怎么知道结束了的呢? 这里会使用到一个默认的字符串结束标志字符’ ’,即此时读入时,会在末尾自动加上 abc[2]=’ ’,所以输出时从字符串的头即0号元素即数组的首地址一直输出到’ ’为止,并且这个结束字符本身不会输出。再如:
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[30]="abab adda";
int i;
printf("%sn",abc);
for(i=0;i<30;i )
printf("%c",abc[i]);
}
输入输出如下: abab adda abab adda 需要注意的是,这个字符串中有个空格字符,如果用到%s输入时,会怎样呢?
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[30];
scanf("%s",abc);
printf("%s",abc);
}
输入输出如下: abab adda abab 因为%s读入遇到空格就结束了。 那么要怎么样才能把具有空格的字符串读入到数组中呢,比如要保存”I love this game”这个字符串,应该怎么做?
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[30]="I love this game ";
printf("%sn",abc);
}
第一种方法是变量赋初值。 I love this game共16个字符,但对于字符串来说,一共使用了17个空间,即 abc[0]~abc[15]共16个来存放实际的字符 abc[16]存放字符串结束标志字符’ ’
代码语言:javascript复制#include "stdio.h"
void main()
{
char st[16];
int i;
for(i=0;i<16;i )
scanf("%c",&st[i]);
for(i=0;i<16;i )
printf("%c",st[i]);
}
输入:I love this game 第二种方法是用%c读入,但是要注意范围。这里只使用了16个空间。 如果使用变量赋初值,也可以简化为这样:
代码语言:javascript复制#include "stdio.h"
void main()
{ char abc[]="abdfsdfd";
printf("%s",abc);
}
这个程序主要是简化了abc[]数组的大小,通过编译系统的自动处理,效果等同于 char abc[9] =”abdfsdfd”;
2. 字符串数组与指针 通过前面的知识,我们知道数组名表示的是这个数组的首地址,而指针变量是可以用来保存地址的。 实例:程序功能:把一个字符串中的数取出来,构成一个整数。
代码语言:javascript复制#include "stdio.h"
void main()
{
char abc[]="a2b1d65fd";
char *p=abc;
int sum=0;
printf("%sn",abc);
while(*p!='