最近开始刷leetcode,使用C语言时,在字符数组、字符串指针常遇到困难,特地拿来当年学的入门书——谭浩强老师的《C程序设计》来重点突破一下,并写下这篇总结。多唠叨一句,现在虽然出现更优秀的书籍,作为一本91年出版的教材有些不合时宜,但是想想近二十年前快退休的谭浩强老师为普及C语言撰写的这本教材,具有其不可磨灭的历史功绩,依然值得后人敬佩。
闲话少说,正文开始!
- 字符型数据
字符型数据可以分为字符常量和字符变量两部分。
字符常量
就是常见的以单撇号括起来的单个字符,包括英文字母、数字和一些符号,均在ASC2码中。如 ‘a’、’G‘、’¥‘、’+‘。
注:特殊形式的字符常量——转义字符。如’\n’、’\t’等。
字符变量(char型变量)
用来存储字符型常量,只能存储一个字符,不能存储字符串。
char c1;
c1 = ‘A’;
字符数据以asc码存储,与整数完全一样,所以,字符数据既可以用%c输出,也可以用%d输出。
C语言可以用字符数据与整数进行运算,可以用字符数据和整形数据直接进行相互赋值。
字符串常量
一对双引号括起来的字符序列,
“How do you do.” “Hello” “$12.7” “*&* (* O” 以及“a”
字符串常量后面有’\0’,结束标志。
C语言没有专门的字符串变量,存储字符串,需要用到字符数组。
字符串输出 %s。
字符数据的输入输出
putchar()函数 输出字符变量(或整型变量), putchar(a)
getchar()函数 从终端输入单个字符, getchar() 以Enter键结束输入,接收空格字符
scanf()函数以空格键 Tab键 回车键结束输入。
字符数组
用来存放字符数据的数组叫做字符数组,数组中一个元素存放一个字符。
定义:char a[10];
初始化:char a[10] = {‘I’, ’ ‘, ’a’, ’m’, ’ ‘, ‘a’, ‘ ‘, ‘b’, ‘o’, ‘y’};
如果花括号中字符数目没有填充满,则以’\0’填补。
char a[] = {‘I’, ’ ‘, ’a’, ’m’, ’ ‘, ‘a’, ‘ ‘, ‘b’, ‘o’, ‘y’};
可以不指定数组长度。
char a[]={“I am a boy”};
或:char a[]=”I am a boy”;
二维数组初始化:char a[8][8] = {{' ','+','-','*','/','(',')','@'},
{'+','>','>','<','<','<','>','>'},
{'-','>','>','<','<','<','>','>'},
{'*','>','>','>','>','<','>','>'},
{'/','>','>','>','>','<','>','>'},
{'(','<','<','<','<','<','=',' '},
{')','>','>','>','>',' ','>','>'},
{'@','<','<','<','<','<',' ','='}}; (来自严蔚敏教材表达式求值算符优先级数组)
需要注意的是,C语言处理字符串,以一维字符数组的形式存储和处理。
用字符数组输出字符串:
char a[]=”I am a boy.”
printf(“%s”,a);
printf中输出项是字符数组名。
用字符数组输入字符串:
scanf(“%s”,c); c为已定义好的字符数组,输入长度不可超过数组长度。
char str1[4], str2[4], str3[5];
scanf(“%s%s%s”,str1,str2,str3);是可以的 scanf不接收空格。
另外:puts(str) 输出字符串 puts将字符串结尾的’\0’转化为’\n’,所以puts输出完后自动换行。字符数组str中可以有转义字符。
gets(str)将字符串(包含最后的‘\0’)送到地址str处
注意:puts和gets函数参数只能是一个。
字符串(字符数组)常用到的函数:
strcat(str1, str2),将地址str2字符串粘贴到str1后面,str1字符数组不能太小。
strcpy(str1,str2),字符串复制
strlen(str1)字符串实际长度
char *p=strstr(str1,str2),字符串str2第一次出现在str1中的位置,没有则返回空指针。
下一篇主要总结字符数组与字符串指针
主要参考资料: 谭浩强《C程序设计》