字符是以数值存储在电脑里(硬盘、内存);这个数值就是二进制数,也就是0101,编写成ASCII码表,将我们需要的字符(包括控制字符等)——对应一个数值,0-127
#includeint main() { char ch01,ch02; ch01='0'; //赋值是字符'0',对应的数值为48 ch02= 0; //赋值是数值0,对应数值就是0 return 0; }
如果将字符放入数组中
#includeint main() { int i; int a[10]={'h','e','l','l','o'}; for(i=0;i<10;i++){ printf("a[%d]=%c ",i,a[i]); printf("a[%d]=%dn",i,a[i]); } return 0; }
结果为:
数组后面的初始化为0,但ASCII码表里0指向空。
获取字符getchar()
getchar()——带回显,换行为结束标志
getch()——不带回显,不用等待用户按回车,只要用户按一个键,就立刻返回,返回是用户输入的ASCII码,出错返回-1
getche()——带回显,不用等待用户按回车,只要用户按一个键,就立刻返回,返回是用户输入的ASCII码,出错返回-1
**getch()和getche()的头文件在
获取字符串gets和fgets
1.scanf(),格式转化符%s
无限获取缓冲区内容,直到遇到'n'scanf才结束,但%s遇到“空格”、“tab键”、“换行”或文件结束符(EOF)认为需要获取结束。
指定拿取内容多少(%数字s)
2.gets()
从缓冲区不停的拿,也可能造成缓冲区溢出现象,遇到“换行”或文件结束符(EOF)才认为结束
使用gets()时,系统将最后“敲”的换行符从缓冲区取出来,然后丢弃
3.fgets()
fgets(字符数组名,n,文件指针)
其中的n是一个正整数,表示从文件中读出的字符串不超过n-1个字符。在读入的最后一个字符加上字符串结束标志' ';stdin 键盘
打印字符串puts
1.循环打印字符
2.直接使用格式化字符%s,需要自己加入换行符,但可以发家其他补充信息
3.调用puts()函数打印
使用puts()输出更简洁、更方便,使用puts()显示字符串时,系统会自动在后面添加一个换行符,但不能添加其他补充信息
字符处理函数ctype.h
字符处理函数库
| 单字节 | 宽字节 | 描述 |
| isalnum | iswalnum | 是否是字母数字 |
| isalpha | iswalpha | 是否为字母 |
| islower | iswlower | 是否为小写字母 |
| isupper | iswupper | 是否为大写字母 |
| isdigit | iswdigit | 是否为数字 |
| isxdigit | iswxdigit | 是否为16进制数字 |
| iscntrl | iswcntrl | 是否为控制字符 |
| isgraph | iswgraph | 是否为图形字符(例如:空格、控制字符都不是) |
| isspace | iswspace | 是否为空格字符(包括制表符、回车符、换行符等) |
| isblank | iswblank | 是否为空白字符(C99/C++11新增)(包括水平制表符) |
| isprint | iswprint | 是否为可打印字符 |
| ispunct | iswpunct | 是否为标点 |
| tolower | towlower | 转换为小写 |
| toupper | towupper | 转换为大写 |
#include#include int main() { int ret=0; ret=isalnum('1'); //数字返回4 ret=isalnum('a'); //小写字母返回2 ret=isalnum('A'); //大写字母返回1 ret=isalnum('+'); //其他返回0 //isalnum() 如果是字母或者数字返回非0,其他返回0 ret=isalpha('1'); // 数字返回0 ret=isalpha('a'); //小写字母返回2 ret=isalpha('A'); //大写字母返回1 ret=isalpha('+'); //其他返回0 //isalpha() 如果是字母(包括大小写),返回值为非0,其他返回0 ret=islower('1'); // 数字返回0 ret=islower('a'); //小写字母返回2 ret=islower('A'); //大写字母返回0 ret=islower('?'); //其他返回0 //islower 如果是小写字母返回非0,其他返回0 ret=isupper('1'); //数字返回0 ret=isupper('a'); //小写字母返回0 ret=isupper('A'); //大写字母返回1 ret=isupper(')'); //其他返回0 //isupper 如果是大写字母返回非0,其他返回0 ret=isdigit('1'); //数字返回1 ret=isdigit('a'); //写字母返回0 ret=isdigit('A'); //大写字母返回0 ret=isdigit(')'); //其他返回0 //isdigit 如果是数字返回非0,其他返回0 ret=isxdigit('1'); //数字返回128 ret=isxdigit('a'); //字母a~f返回128 ret=isxdigit('f'); ret=isxdigit('g'); //字母>g返回0 ret=isxdigit('A'); //字母A~F返回128 ret=isxdigit('F'); ret=isxdigit('G'); //字母>G返回0 ret=isxdigit('='); //其他返回0 //isxdigit 十六进制数 数字、大小写字母a~f返回数字,其他返回0 printf("ret=%dn",ret); return 0; }
课后练习:
1.编写一个函数,需要一个指向字符串的指针变量作为参数,并返回字符串的长度。main函数调用进行测试。
#includeint main() { // char *arr; int n; char *ch; char *d="sdadsdfdrfdsg"; ch=d; //指针初始化 // while(*ch!=' ') { // printf("%c ",*ch); // ch++; // } // printf("%#p ",ch); n=num(ch); printf("%d",n); return 0; } int num(char *a) { int ret=0; //printf("%#p ",c); while((*a)!=' '){ a++; ret++; } return ret; }
2.设计一个函数,其参数为一个字符串指针,并且返回一个指针,该指针指向 字符串中所指位置后(包括该位置)的第一个空格字符,如果找不到空格字符, 就返回空指针
#includeint main() { char arr[10]; printf("请输入字符串"); gets(arr); int n; n=chuli(arr,10) ; if(n==NULL) printf("无空格"); else printf("第%d个为空格",n) ; return 0; } int chuli(char *p,int n ) { //int ret=0; int i; // printf("%c",*p); for(i=0;i 3.编写一个程序,要求连续输入n个不重复的字母,利用指针引用方式按照字母表进行排序
#includevoid ssort(char *ab,int a); int main() { char arr[5]; int i; printf("请输入一串字符串,且不重复"); gets(arr); // printf("%#p ",p); ssort(arr,5); for(i=0;i<5;i++) { printf("%c",arr[i]); } return 0; } void ssort(char *ab,int a) { int i,j; // char *arr; // arr=ab; // printf("%#p ",arr); //printf("%c",*arr); char temp; for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(*(ab+i)>*(ab+j)){ temp=*(ab+i); *(ab+i)=*(ab+j); *(ab+j)=temp; } } } } 4.输入一个字符串,内有数字和非数字字符,例如: A123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1] ......,统计共有多少个整数,并输出这些数。
#includeint main() { char arr[7]; char *p; p=arr; int i; int result[4]; printf("请输入字符串"); gets(arr); int temp=0;int j=0; for(i=0;i<7;i++){ printf("arr[i]=%c ",*(p+i)); if(*(p+i)>='0'&&*(p+i)<='9'){ temp=temp*10+(*(p+i)-48); printf("temp=%d ",temp); if(*(p+i+1)==' '){ result[j]=temp; } } else{printf("n"); result[j]=temp; printf("1111temp=%d ",temp); temp=0; j++; } } for(i=0;i<4;i++){ printf("result[%d]=%d ",i,result[i]); } return 0; }



