快速了解字符串

字符串

字符:char ch;

在计算机中字符是以整数形式存储在内存中,当需要时显示字符时,计算机会根据ascll码表中的
对应关系来显示出相应的符号或图案
	单引号括起来的
	'\0'		0		空字符(不是空格)
	'0'			48
	'A'			65
	'a'			97
	
字符的输入:
	scanf("%c",&ch);  接收一个字符
	ch = getchar();
字符的输出:
	printf("%c",ch);
	putchar(ch);

串:

是一种数据结构,是由一组连续的若干个相同类型的数据组成,末尾会有一个结束标志。
对于数据结构的处理都是批量处理,从开头位置开始直到结束标志为止

字符串:

由字符组成的串行结构,结束标志是'\0'

字符串的输入

scanf("%s",&ch);
注意:不能接收空格

gets:
char *gets(char *s);
功能:输入字符串并且能够接收字符
返回值:链式调用(把一个函数的返回值当做另一个函数的参数)


fgets:
char *fgets(char *s, int size, FILE *stream);
功能:可以设置输入的字符串的长度为size-1,超出部分不接收,会给'\0'预留位置
注意:如果输入的字符数不足size-1个,最后的'\0'也会被接收
char str[20] = {};
fgets(str,20,stdin);		stdin:接收键盘的输入

字符串输出:

printf("%s",str);

puts:
int puts(const char *s);
功能:输出一个字符串,会在末尾自动添加一个\n
返回值:成功输出的字符个数

字符串的存在形式:

字符数组:char str[5] = {1,2,3,4,5};
	由char类型组成的数组,要为'\0'预留位置,使用的是栈内存,因此数据可以修改
字符转字面值:"Hello World"
	"由双引号包含若干个字符" 
	字符串字面值是以地址形式存在的,数据时存储在text(代码段)中,如果修改则会
	产生段错误
	
	const char* p = "字符串字面值";
	sizeof("strstr");	结果= 字符个数+1 ('\0')隐藏字符
	两个一模一样的字符串字面值在代码段中只存储一份
	
常用方式:字符数组[] = "字符串字面值";
	char str[] = "hello";
	printf("%s\n",str);
	str[0] = 'H';
	printf("%s\n",str);
	会自动为'\0'预留位置
	注意:赋值完成后字符串就存在了两份,一份存储在代码段(不能修改),一份存储在栈内存(可以次改)
	
	# 字符串常用函数:
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串长度,但是结果不包括'\0'  与size不同
返回值:返回字符串长度,字符串字符的个数

求字符串长度

#include <string.h>
size_t strlen(const char *s);
功能:计算字符串长度,但是结果不包括'\0'  与size不同
返回值:返回字符串长度,字符串字符的个数

字符串复制:

char *strcpy(char *dest, const char *src);
功能:把src拷贝到dest中,相当于给dest赋值 =
返回值:dset(链式调用)

char *strncpy(char *dest, const char *src, size_t n);
功能:把src拷贝n个字符到dest

void *memcpy(void *dest, const void *src, size_t n);
功能:从src位置中拷贝n个字节到dest中-----从内存中拷贝,拷贝的类型不变

追加:

char *strcat(char *dest, const char *src);
功能:把src的内容追加到dest的后面,相当于 dest +=
返回值:dest(链式调用)  首地址

char *strncat(char *dest, const char *src, size_t n);
功能:只追加src中的n个字符到dest中

比较:

int strcmp(const char *s1, const char *s2);
功能:比较两个字符串,根据字典序比较,谁在前面谁小
返回值:
	s1 == s2	0;
	s1 > s2		整数
	s1 < s2		负数

int strncmp(const char *s1, const char *s2, size_t n);
功能:比较前n个字符的大小

int memcmp(const void *s1, const void *s2, size_t n);
功能:比较两块内存中的数据是否相等,“按字节比较”
返回值:
	s1 == s2    0
	s1 > s2		正数
	s1 < s2 	负数

常用的字符串处理函数

sprintf:字符串拼接
int sprintf(char *str, const char *format, ...);
功能:把各大类型的数据输出到str中
返回值:字符串长度

sscanf:从字符串中解析数据
int sscanf(const char *str, const char *format, ...);
功能:从str中按照格式,读取数据
返回值:成功读取到的变量个数
例子:
	const char *str = "1995 10 1";
    int year,month,day;
    sscanf(str,"%d %d %d",&year,&month,&day);
    printf("%d %d %d\n",year,month,day);




练习1:自己写strlen,strcpy,strcat,strcmp

#include<stdlib.h>
int atoi(const char *nptr);
功能:将字符串转换成int类型

long atol(const char *nptr);
功能:将字符串转换成long类型

double atof(const char *nptr);
功能:将字符串转换成double类型

#include<string.h>
char *strstr(const char *haystack, const char *needle);
功能:查找字符串haystack中是否有needle字符串
返回值:返回needle在haystack中第一次出现的位置,如果找不到NULL

char *strchr(const char *s, int c);
功能:查找字符串s中是否有字符c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值