字符串的输入输出
对字符串的输入输出可以采用格式化输入输出函数scanf( )、printf( ) (格式符用s或c)或getchar( )、putchar( )。
1.逐个字符输入输出
char a[10],b[7];
for (k=0;k<10;k++)
scanf ("%c",&a[k]);
for (k=0;k<7;k++)
b[k]=getchar( );
for (k=0;a[k]!='\0';k++)
printf ("%c",a[k]);
for (k=0; a[k]!='\0';k++)
putchar(a[k]);
1.逐个字符输入输出
char a[10],b[7];
for (k=0;k<10;k++)
scanf ("%c",&a[k]);
for (k=0;k<7;k++)
b[k]=getchar( );
for (k=0;a[k]!='\0';k++)
printf ("%c",a[k]);
for (k=0; a[k]!='\0';k++)
putchar(a[k]);
2.字符串整体或部分输入输出
char a[10],b[7]="abcde";
scanf ("%s",a); /* 键盘输入的字符串存入a数组 */
printf("%s",a); /* 输出a数组中的字符串 */
printf("%s",&b[1]); /* 输出b数组中从b[1]开始的字符串:bcde */
注意:
① 用格式符s输入输出字符串,其输入(出)项必须以字符串的地址形式出现。
上例中a是字符数组名,它代表该数组的首地址,所以不要在数组名前再加地址运算符。scanf("%s",&a);是错误的。若出现字符数组元素的地址,则表示输入(出)对象是从该地址开始的字符串。
另外,输出项以字符串常量形式出现也是正确的,此时它表示其首地址。下列输出函数的功能是输出字符串"abcd"。
printf("%s","abcd");
② 用格式符s输出字符串时,从输出项提供的地址开始输出,直到遇字符串结束符'\0'为止。
char a[10],b[7]="abcde";
scanf ("%s",a); /* 键盘输入的字符串存入a数组 */
printf("%s",a); /* 输出a数组中的字符串 */
printf("%s",&b[1]); /* 输出b数组中从b[1]开始的字符串:bcde */
注意:
① 用格式符s输入输出字符串,其输入(出)项必须以字符串的地址形式出现。
上例中a是字符数组名,它代表该数组的首地址,所以不要在数组名前再加地址运算符。scanf("%s",&a);是错误的。若出现字符数组元素的地址,则表示输入(出)对象是从该地址开始的字符串。
另外,输出项以字符串常量形式出现也是正确的,此时它表示其首地址。下列输出函数的功能是输出字符串"abcd"。
printf("%s","abcd");
② 用格式符s输出字符串时,从输出项提供的地址开始输出,直到遇字符串结束符'\0'为止。
若有:char b[3]="xyz",c='H',a[10]="abcd\0123";
printf("b=%s\n", b);
printf("a=%s\n", a);
则输出:b=xyzHabcd
a=abcd
因为b数组长度为3,用"xyz"初始化,字符串结束符'\0'无法存储,输出xyz后未遇到'\0',于是接着输出后续存储单元c的内容H和a数组的内容abcd,直到遇'\0'停止输出。对a数组,输出abcd后,也是遇到'\0'后停止输出。
③ 用格式符s不能输入带空格、回车或跳格的字符串。因为空格、回车或跳格是输入数据的结束标志。
Char a[10];
scanf("%s",a);
printf("%s\n",a);
输入:How are you↙
输出:How
printf("b=%s\n", b);
printf("a=%s\n", a);
则输出:b=xyzHabcd
a=abcd
因为b数组长度为3,用"xyz"初始化,字符串结束符'\0'无法存储,输出xyz后未遇到'\0',于是接着输出后续存储单元c的内容H和a数组的内容abcd,直到遇'\0'停止输出。对a数组,输出abcd后,也是遇到'\0'后停止输出。
③ 用格式符s不能输入带空格、回车或跳格的字符串。因为空格、回车或跳格是输入数据的结束标志。
Char a[10];
scanf("%s",a);
printf("%s\n",a);
输入:How are you↙
输出:How
由于空格、跳格和回车均是输入数据结束的标志,所以How are you被看作3个输入数据,只把How作为a数组的数据。那么,如何输入带空格、回车或跳格的字符串?下面介绍的gets( )函数可以解决这个问题。
3.用gets( )和puts( )函数输入输出字符串。
printf函数是如何实现的 由于gets( )和puts( )函数均在文件stdio.h中定义,因此要使用这两个函数,就必须在程序开头加上命令行:#include "stdio.h"。
gets函数调用形式:
gets(sadr);
功能:从键盘读入字符串,直到读入换行符为止,用'\0'代替换行符并把读入的字符串存入以satr为首地址的存储区中。
puts函数调用形式:
puts(sadr);
功能:把首地址为satr 的字符串显示在屏幕上,并换行。
char a[15],b[20]="abcd\n1234";
gets(a);
puts(a);
puts(b);
输入:How are you↙ /* 用gets(a)函数可以输入含空格的字符串 */
输出:How are you
abcd /* 输出abcd后输出'\n'引起换行 */
1234 /* 继续输出1234 并换行 */
puts(a);
puts(b);
输入:How are you↙ /* 用gets(a)函数可以输入含空格的字符串 */
输出:How are you
abcd /* 输出abcd后输出'\n'引起换行 */
1234 /* 继续输出1234 并换行 */
例8-3:将给定的字符串复制到另一字符串。
用两个字符数组分别存放源字符串和目标字符串。复制时,一边读源字符串的字符,一边把该字符存入目标字符串,这个过程可以在一个循环中实现,循环结束的条件是遇到源字符串末尾的字符串结束符。
#include"stdio.h"
main( )
{ char s1[80],s2[80];
int i;
printf("input string s2:\n");
gets(s2);
for(i=0;s2[i]!='\0';i++)/* 逐个字符地复制 */
s1[i]=s2[i];
s1[i]='\0'; /* 在复制的字符串末尾加上字符串结束符 */
puts(s1);
}
运行程序:
input string s2:
输入:Beijing↙
输出:Beijing
printf("input string s2:\n");
gets(s2);
for(i=0;s2[i]!='\0';i++)/* 逐个字符地复制 */
s1[i]=s2[i];
s1[i]='\0'; /* 在复制的字符串末尾加上字符串结束符 */
puts(s1);
}
运行程序:
input string s2:
输入:Beijing↙
输出:Beijing
例8-4:求给定的字符串的长度。
字符串的长度是指字符串中的字符个数,不包含字符串结束符。从第一个字符开始逐个字
符计数,直到遇上字符串结束符。
#include"stdio.h"
main( )
{ char s1[80];
int i;
printf("input string s1:\n");
gets(s1);
i=0;
while(s1[i]!='\0') i++;/* 逐个字符计数 */
printf("i=%d\n",i);
}
运行程序:
input string s1:
输入:Beijing↙
输出:i=7
#include"stdio.h"
main( )
{ char s1[80];
int i;
printf("input string s1:\n");
gets(s1);
i=0;
while(s1[i]!='\0') i++;/* 逐个字符计数 */
printf("i=%d\n",i);
}
运行程序:
input string s1:
输入:Beijing↙
输出:i=7
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论