第九章 字符串【★】
9.1 登陆系统
例1:编写程序模拟系统登陆,验证输入的用户名和密码是否正确
#include <stdio.h>
#include <string.h>
int main(void)
{
char username[100];
char passward[100];
printf("输入用户名和秘密");
printf("用户名:");
scanf("%s",username);
printf("密码:");
scanf("%s",passward);
if(strcmp(username,"zhangsan")==0 && strcmp(passward,"123")==0)
{
printf("登录成功!");
}
else {
printf("登陆失败!");
}
return 0;
}
9.2 文本处理
①字符串是一个用双引号括起来的一’\0’结束的字符序列
②字符串在内存存放时自动在最后加上一个ASCII码值未0的NULL字符作为字符串结束标志,NULL字符用八进制转义字符就是’\0’,所以字符串"XYZ"实际上占用了4个字节的内存空间
③如果要在字符串常量中表示双引号本身,就需要用转义字符"
例2:显示字符串常量占用的内存空间
#include <stdio.h>
int main(void)
{
printf("sizeof(\"123\")=%u\n",sizeof("123"));
printf("sizeof(\"XY\\tZ\")=%u\n",sizeof("XY\tZ"));
printf("sizeof(\"abc\\0ade\")=%u\n",sizeof("abc\0def"));
return 0;
}
例3:保存字符串的数组
#include <stdio.h>
int main(void)
{
char str[4];
str[0]='X';
str[1]='Y';
str[2]='Z';
str[3]='\0';
printf("%s",str);
}
9.3 必备知识
1 字符数组和字符串
字符数组的定义和初始化
①如果字符数组没有\0,则数组就不能当作字符串来处理
②还可以使用字符串常量来初始化字符数组
char str[]={“CHINA”};//这样会自动添加\0
char str[]=“CHINA”;//也可以直接用双引号
注意事项:
①数组的长度必须比字符串的元素个数至少多1,用以存放字符串结束标志
②用字符串初始化字符数组时,可以默认数组长度的定义
③数组名是地址常量,不能将字符串直接赋值给数组名
④字符串到第一个\0结束
字符数组的输入输出【重要 这些例子记住最重要】
①单个字符输入输出
char ch;
scanf("%c",&ch);
printf("%c",ch);
②字符串的整体输入输出
char str[81];
scanf("%s",&str);
例4:键盘输入人名
#include <stdio.h>
int main(void)
{
char name[10];
printf("输入姓名:");
scanf("%s",name);
printf("Hello %s!\n",name);
return 0;
}
2 字符串输入输出函数
单个字符的输入输出函数
char ch;
ch=getchar();//读取字符串
ch=getch();//读取字符
putchar(ch);//字符输出函数
字符串的输入输出函数
char name[10];
gets(name);//字符串输入
fgets(name,sizeof(name),stdin);//限制输入字符串的长度
puts(str);//字符串输出
3 字符串处理函数
#include <string.h>
int strlen(str1);//返回字符串长度
strcpy(char str1,char str2);//第二个复制到第一个
strncpy(char str1,char str2,int maxlen);//只复制前maxlen个
strcat(char str1,char str2);//后面接上前面
int strcmp(str1,str2);//依次比较ASCII码大小
4 字符串转换函数
#include <stdlib.h>
int atoi(str1);//字符串转化为int
long atol(str1);//字符串转化为long
double atof(str1);//字符串转化为double
5 字符处理函数
int isdigit(int c);//是否阿拉伯数字
int islower(int c);//是否小写字母
int isupper(int c);//是否大写字母
int isalpha(int c);//是否字母
int isalnum(int c);//是否数字
int tolower(int c);//如果大写字符,转化成小写字符后返回,否则返回本来的
int toupper(int c);//如果小写字母,转化成大写字母后返回,否则返回本来的
int isspace(int c);//是不是空白字符,包括空格、换行符、回车符、水平制表、垂直指标、换页
int iscntrl(int c);//是不是ASCII控制码,也就是判断c的范围是否在0-30之间
int isprint(int c);//c是否为可打印字符,包括空格在内
int isgraph(int c);//c是否为可打印字符,除空格