软件开发教程 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试
游戏开发 网络协议 系统运维 HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程
C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
 
   -> C++知识库 -> C语言学习6---字符,字符串 -> 正文阅读

[C++知识库]C语言学习6---字符,字符串

字符

最小的整数类型:char
char是一种整数,也是一种特殊的类型:字符。
printf,scanf里用%c来输入输出字符。

#include<stdio.h>

int main() {
	char c=1;
	char d='1';
	if(c==d){
		printf("相等\n");
	}else{
		printf("不相等\n");
	}
	printf("c=%d\n",c);
	printf("d=%d\n",d);  //输出字符 1 所对应的ASCII码。
	
}

在这里插入图片描述
这说明:

  1. 数字1和字符 ‘1’ 是不一样的。
  2. 字符 ‘1’ 在计算机内部的值就是49。
  3. 'A’是65。'a’是97 ,0是48
#include<stdio.h>

int main() {
	char c; 
	scanf("%c",&c);
	printf("c=%d\n",c); //以%d输出是 49       ASCII码
	printf("c=%c\n",c); //以%c输出是 1        字符本身
	
}

在这里插入图片描述

#include<stdio.h>

int main() {
	char c=65; 
//	scanf("%c",&c);
	printf("c=%d\n",c); 
	printf("c=%c\n",c);             ASCII值65所对应的字符
	
}

//这两段代码的输出结果是一样的。说明 65=='A'

int main() {
	char c='A'; 
//	scanf("%c",&c);
	printf("c=%d\n",c); 
	printf("c=%c\n",c);  
	
}

在这里插入图片描述
空格的ASCII是32

#include<stdio.h>

int main() {
	int i;       //数值 
	char c;     //字符 
	scanf("%d%c",&i,&c);
//	字符c分别以ASCII码值和字符本身进行输出 
	printf("i=%d,c=%d,c='%c'\n",i,c,c); 
 	
}

在这里插入图片描述
scanf读取了12以及后面的空格,并未读取到1.
在这里插入图片描述
这个时候读到了A。也就是说在scanf()里面%d后没有空格的时候注意输入的格式。(注意 “%d%c”“%d %c” 之间的区别)

字符计算
常见ASCII码的大小规则为:
数字(0 ~ 9)<大写字母(A ~ Z)<小写字母(a ~ z).
同个字母的大写字母比小写字母小32.
printf() 支持的格式

int main() {
//支持两对双引号,但这两对双引号不要用逗号进行分隔,否则第二对双引号里的内容不会呈现出来。
	printf("请分别输入身高的英尺和英寸,\n年后" "如输入5 7表示5英尺7英寸:"); 	
}

在这里插入图片描述
逃逸字符

int main() {
 
	printf("请分别输入身高的英尺和英寸,如输入\"5 7\"表示5英尺7英寸:"); 
	//      \" 表示双引号 "
 	
}

在这里插入图片描述

字符串

字符数组(不能用字符串的方式做运算):

char word[]={'H','e','l','l','o','!'};     // 有6个单元

字符串:

char word[]={'H','e','l','l','o','!','\0'};    //有7个单元
//sizeof(word)/sizeof(word[0])==7

对于C语言来说,字符串是以\0结尾的一串字符。\0是标志字符串的结束,但它不是字符串的一部分。该字符的存在意味着数组的单元数(字节数,字符数)必须至少比要存储的字符数多1. 例如 char word[8]最多只能接收7个字符,因为要留一个空位给\0.

计算字符串长度(strlen)的时候不包含这个0.
计算字符串占据内存空间(sizeof)的时候包含这个0.

字符串在内存里的存在形式就是数组,C没有为字符串定义专门的变量类型,而是把它存储在char数组中。但访问形式可以是数组或指针。
字符串处理函数放在 string.h 这个头文件里

定义一个变量去表达字符串:
有几种不同的写法,(字符串是数组,所以实际上这些变量都是字符数组的变量,只不过有不同的表现形式)

    char *str="hello";
	char word[]="hello"; //strlen(word)是5,sizeof(word)是6;sizeof算的是字节内存空间。
 	char line[10]="hello"; //字符数组的大小是10个字节,hello这5个字符在line里头要占据6个字节,编译器会替你生成一个结尾的0.

“hello”会被编译器变成一个字符数组,这个数组的长度(sizeof)是6 (眼睛所看到的字符的长度+1),结尾还有表示结束的0.
没有这个0,它不是字符串。
两个相邻的字符串常量,中间没有任何其他符号,会被自动连接起来。如:

printf("abcde"    "fghijkl");
输出结果:
abcdefghijkl
printf("abcdef\
jvkdsgjsdgj");    //这样也是可以的,\是换行

s是一个指针,指向一个字符串常量,不能对s所指的字符串进行读写修改。

char *s="Hello,world!"; 

如果需要修改字符串,应该用数组:

char s[]="Hello,world!";

字符串两种形式(指针\数组):

char *str="Hello world!";
char word[]="Hello world!";

作为数组,表示这个字符串就在这儿,作为本地变量,空间会被自动回收。
作为指针,不知道这个字符串在哪里,只读的,不可写(可用作函数参数,动态分配空间)
因此:
如果是构造一个字符串,用数组形式。
如果是处理一个字符串,用指针形式。
字符串输入输出:

char *t="title";
char *s;
s=t;

其实做的事情是指针t指向了某处的一个字符串,内容是 title\0 。然后s也指向了t所指的这个字符串。
并没有产生新的字符串,对s的任何操作就是对t做的。
scanf,printf对字符串进行输入输出
%s

char string[8];
scanf("%s",string);
printf("%s",string);

scanf读入一个单词(到空格,tab或回车为止,分隔符,不会被读到)
例如:
只有一个scanf时,

scanf("%s",string);

这时输入

hello   world

只会读到hello

当再有一个scanf时,

scanf("%s",string);
scanf("%s",string2);

string会是hello,string2会是world,空格是不会被读到的,因为是分隔符。

scanf("%7s",string);
//   %7s告诉scanf最多只能读入7个字符,超过7个字符就不要了
例如输入12345678,只会读取1234567

常见错误:

char *string;
scanf("%s",string);

char *不是字符串类型
第一行只是定义了一个指针变量,string是一个将来要去指向某个字符串的指针。但是并没有被初始化,本地变量没有默认初始值,原来在那个内存里有什么就是什么,所指的地方是有害的地方的时候,程序就会崩溃。
所以要对指针进行初始化,要让指针指向一个实际有效的地址。

  C++知识库 最新文章
c++ 从键盘输入三个数比较大小
C++ 友元函数
剑指offer 栈与队列 C++
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作
QWQ氏计算器English(v1.1.1)c++
GCC详解-Binutils工具之c++filt
c++进阶练习题--基础篇(1)
C++ Builder xe 关于FolderDialog1的自定义
第五天C语言数组
C语言for循环
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:33:36  更:2021-07-17 12:33:40 
 
360图书馆 购物 三丰科技 阅读网 日历 万年历 2021年7日历 -2021/7/27 4:42:30-
图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件开发教程