5.3 字符数组与字符串Wang Li如何让程序存储我的姓名?
char a='W'; char b='a'; char c='n'; char d='g'; char e='L'; char f='i';
char name[15] ={ 'W', 'a', 'n', 'g', 'L', 'i'};用字符数组
用若干个字符 用字符串char name[15]= “Wang Li”;
5.3.1 一维字符数组一维字符数组的定义、引用、初始化与其他类型 的一维数组一样。char str[80];定义一个含有80个字符型元素的数组str
char t[5]={'H', 'a', 'p', 'p', 'y'};初始化数组 t
输出数组 t 的所有元素
t
H a p p yt[0] t[1] t[4]
for(i=0; i<5; i++) putchar( t[i] );
5.3.2字符串字符串常量
字符串常量是双引号括起的任意字符序 "Hello World" 列 "WangPing""Please enter your full name:" “Hello!\n"字符串常量中可以包含转义序列
H
e
l
l
o
W o
r
l
d \0字符串结束符
字符串的有效长度:有效字符的个数
字符串的存储auto char s[80]= "Happy"; 字符串遇 '\0' 结束 第一个 '\0' 前面的所有字符和 '\0' 一起构成了字 符串 "Happy” '\0' 之后的其他数组元素与该字符串无关字符串由有效字符和字符串结束符 '\0' 组成
s
H a p p y \0 ? ?
s[0] s[1]
s[5]
字符串与字符数组在C语言中没有专门的字符串变量,通常 用一个字符数组来存放一个字符串 字符数组和字符串的区别是:字符串的末 尾有一个空字符 ‘\0 字符串可按如下方式声明并初始化: char name[15]={ 'W', 'a', 'n', 'g', 'L', 'i', '\0'}; char name[15] = "WangLi";手工加入一个空字符 系统将自动加入一个空字符
char password[] = "12345678";省略数组大小,系统自动计算,大小为后 面的字符总数加1,最后一个元素存入一个 空字符。
2. 对字符串的操作把字符串放入一维字符数组(存储) 对字符串的操作 ===> 对字符数组的操作
普通字符数组:数组元素的个数是确定的,一般 用下标控制循环 字符串:没有显式地给出有效字符的个数,只规 定在字符串结束符 '\0' 之前的字符都是字符串 的有效字符,一般用结束符 '\0' 来控制循环 循环条件:s[i] != '\0'
5.3.3 字符串的输入输出
方法1: 象普通数组一样逐元素输入输出 例11 从键盘读入一个字符串,以回车符表示输入结束。 输出该字符串长度,然后输出该字符串 输入:s[0]=getchar(); //读入第一个字符 或 i=0;0; i= while(s[i]!= \n ) //当不是回车 while((s[i] = getchar( )) != '\n') { i++; i++; s[i]= \0 ; //将 \n 转换为 ‘\0’ s[i]=getchar(); } 字符串长度是i还是i-1、i+1? s[i]='\0'; //将 \n 转换为 '\0' 字符串长度是有效字符个数 s[0]…s[i-1],共i个 输出字符串,不需要知道字 符个数, \0 是结束标志 for( i=0; str[i]!= \0 ; i++) putchar(str[i]);
W a n g
\n L i \0
方法2:用%s整体输入输出char name[10]; scanf("%s", name);
printf("%s", name);格式描述串中使用转换 字符串“%s”Wang Li Wang
使用 scanf 时, 不能输入空格
空格是%s输入结束的标志n g \0
W
a
方法3:用gets和puts函数char name[10]; gets(name);Wang Li
使用 gets函数 允许输入空格Wang Li
puts(name);从键盘上读入一个完整的行, 存入字符数组name。并用 把字符数组中的字符串输出 空字符'\0'取代行尾的换行符 到显示器。 '\n'。
W a n g
L i
\0
5.3.4字符串应用举例例12. 输入一行字符(字符个数不多于80), 统计其中空格的个数思路分析: (1)定义字符数组 str[81];
(2)读入字符串若字符串确定不含空格,可以用scanf(“%s”,&str); 若可能含有空格,用gets(str); (3)扫描整个字符串(不需要知道字符个数) for(i=0;str[i]!= 0 ;i++)
{……}
#include <stdio.h> int main() { C is a programming language char str[81]; int i, count = 0; 其中的空格总数为 4 printf("\n 请输入一行字符:\n "); gets(str); 在循环执行时,扫描整个数组以 也可用while 循环 for(i=0; str[i] != '\0 ; i++) 统计出空格 ‘ ‘ 的数量,直到 i = 0; { 遇到字符 ’\0 。 while(str[i]!='\0') if( str[i] == ' ') { count++; if(str[i] == ' ') } count++; printf(“\n 其中的空格总数为 %d \n ",count); i++; } }
模仿练习:输入一个以回车结束的字符串(少于80个字符),统 计其中数字字符的个数。
#include <stdio.h> int main() 模仿练习 源程序 { int count, i; char str[80]; Enter a string: It's 512? printf("Enter a string: "); count = 3 gets(str); count = 0; for(i = 0; str[i] != ‘\0’; i++) //若是数字 if(str[i] <= '9' && str[i] >= '0') count++; printf("count = %d\n", count); return 0; I t ' s 5 1 2 \0 ? ? s }0 1 2 3 4 5 6 7 8
例13 进制转换输入一个以回车结束的字符串(少于80个字符),把字符串 中的所有数字字符(0~9)转换为整数,去掉其他字符。 例如,字符串”3a56bc”,转换后的整数为356难点分析:
如何将字符串转化为整数值?例如字符串”356“转换为整数356 (1)遇到第一个整数3, d=3; (2) 遇到第二个整数5, d=d*10+5=35 (3) 遇到第三个整数6, d=d*10+6=356
d=0; for(i=0; str[i] != '\0 ; i++) { if( str[i] >= 0 && str<= 9 ') d=d*10+(str[i]- 0 ) }
……….
str[i]中存的是字符, str[i]- 0 将其转化为对 应的十进制数字
#include <stdio.h> int main() { int d, i; char str[80]; printf("Enter a string: "); gets(str); d = 0; for(i = 0; str[i] != '\0'; i++) //若是数字 if(str[i] <= '9' && str[i] >= '0') d = d*10 + (str[i] - '0') printf(“d = %d\n", d); return 0; }
例14 统计单词个数方法1:统计空格数?? 问题:没考虑多个空格相连的情况 方法2:如果一个空格紧跟一个非空格,一定是新单 词开始 this is my first test! 问:第一个单词没算上? 答: count在加1就行!?? 再问:若
第一个单词前有空格会怎样?就又多了1
思路分析
方法3:如果一个非空格后是一个空格,一定 是单词的结束 this is my first test! 问:最后一个单词没算上? 答: count在加1就行!?? 再问:若最后一个单词后有空格会怎样? 就又多了1
思路分析设置一个标志变量word 开始word置0 For(i=0;str[i]!= \0 ;i++) //扫描整个字符串 若str[i]是空格 word置0 若str[i]不是空格且word==0 则新单词出现,count++; word置1;
#include<stdio.h> int main() { char str[1000]; int i, word, count; word=0; count=0; gets(str); for(i=0; str[i]!='\0'; i++) { if(str[i]==' ' ) word=0; if(str[i]!=' ' && word==0) //新单词出现 { count++; word=1; } } printf("%d\n",count); }
程序实现
5.3.5 常用字符串函数以下介绍的字符串函数定义在头文件 <string.h>中 (1)strlen: 求字符串长度 (2)strcpy:字符串复制(赋值) (3)strcmp:字符串比较 (4)strcat:字符串合并 (5)strrev:字符串逆置
21
(1) 求字符串长度 strlen( )调用格式:strlen(str) 功能:测试字符串长度。函数值就是str中字符的 个数。
例如:char str[10]= "China"; printf("%d",strlen(str)); 或 printf("%d",strlen("China")); 输出结果: 5
2012-10-16