C语言-->(十三)字符串

知识点:
1.字符和字符处理函数
2.字符串的本质和字符串输入输出函数
3.字符串转换函数
4.常用字符串处理函数
5.字符串查找函数
6.字符串分割函数
7.字符串替换
8.常用字符串处理函数实现
9.sscanf sprintf函数

================================
C中必须先定义类型后使用,没有字符串类型,字符串用一串字符,基本元素是字符

“xiaoqiang\0”

字符和字符处理
1常用字符
数字字符: ‘0’ ‘1’ — ‘9’
字母字符:’M’ ‘F’ ‘a’ — ‘z’ ‘A’—-‘Z’
其它字符: ‘+’ ‘- ’ ‘*’ ‘/‘ ‘!’

2常用字符对应的ascii码
数字字符: 0 ‘0’=48 — ‘9’ =48 + 9
字母字符: ‘a’= 97 —— ‘z’ = 97 + 25 ‘A’= 65 ’’Z’ = 65 + 25 = 90
常用字符: ‘ ‘ = 32 ‘\n’ ‘\0’

3.复习ascii码

4.字符的本质

计算机是以二进制存储数据,字符是怎么存储的呢?

思考:sizeof(char)和 sizeof(‘a‘) = sizeof(97) = 4

1)字符的本质为一个int类型的ascii码
sizeof(‘a’) sizeof(“a“)

2)字符变量保存的是ascii码,但是ascii码只需要一个字节即可保存
在所有的编译系统中都规定以一个字节来存放一个字符,字符数据都是以ASCII码存储

3.使用字符判断函数
isdigit 数字字符
isalpha 字母(大小写)
isalnum 数字字符和字母
islower 小写字母
isupper 大写字母
isspace 空格字符
0 --表示测试不成立
1 --表示测试成立
练习:
1.随机输入一字符串,包含大小写字母、数字字符、空格,统计其中数字字母,大写字母,小写字母,及空格的个数

4.使用字符转换函数 //验证码
toupper 小写转换为大写
tolower 大写转换为小写

练习:
1.随机输入一字符串,包含大小写字母和空格,将原来的大写字母转换为小写字母,小写字母转换为大写。

=================================
字符串
"hello"
用“”的一串字符 ,以‘\0‘
两种表示方式
//栈
a,将一个或多个字符用“”串在一起,以字符数组存储,系统默认加‘\0‘。

//只读数据段
b,不以字符数组引用时为一个常量

1.字符串的本质
1)字符串本质为字符串常量
"hello world" "Hello world"

2.思考:sizeof(‘A‘)和sizeof(“A”)
字符常量按照4个字节处理
字符串常量为了节省内存空间,字符串中的所有字符均以char类型处理

3.char *str表示字符串和char str[]表示字符串的区别

=================================
字符串的输入输出
1.字符串的输入和输出
0)字符串输入输出函数
1>回忆scanf获取字符串
%c scanf(“%s”); string
%s printf("%s",addr)
2>如何获取带空格的字符串
%[^ \n] 正则表达式

3> puts string
4>字符串输出
puts函数会在字符串输出后添加换行符号
puts(str) = printf("%s\n",str);
1)字符串的输入与溢出问题 数组越界
思考:字符数组在输入时候的长度问题
2)解决方法
fgets
用法:fgets(buf, len, stdin); // stdin stdout stderr 两种 1接受回车 2接受\0
从标准输入获取指定长度的字符串,包含字符串结束符
(1)定义长度为10的数组,输入一串字符,包含空格回车,并输出

=================================
字符串转换函数 "100" + "200" === 100 + 200 = 300
需求:现在用户输入一个算术表达式,要求得到对应的结果
思考:如何将字符串中的字符数字转换为真实的数字
1.字符串转换函数 %d %f %o %#x %#o
1)atoi
//atoi函数的工作原理
从第一个非空格的数字符开始转换,直到遇到第一个非数字字符结束
atol
atof atof返回double

2)实现atoi函数(支持正负数)
示例:实现个位数的负数转换
练习: char *str1 = "98765"
char *str2 = "54321"
ret = 98765+ 54321

"101 0110" 十进制 10 10110
二进制 86
八进制 8^6 + 8^4 + 8^2 + 8

3)strtol函数 1010 0x123456

1>atoi的增强版 1010a1001
long strtol(char *str,char **p, int base);

字符串中不能出现和当前进制相悖的数据
1>atoi的增强版 2, 8, 10, 16

2>函数说明:将指定字符串按照base的进制方式转换为10进制
base范围为2~36
练习:输入一个字符串,再输入一个整形数,将字符串按整形数进制转换成整数

====================================
字符串常用函数
1.字符串长度计算函数 "hello"
需求:用户需要知道输入的字符数的长度
1)strlen函数使用 == string length

2)思考:strlen和sizeof的区别
(a)strlen是字符串函数,只能测试字符串,sizeof是运算符,可以计算任何类型的数据
(b)strlen 所见即所得,字符串的实际长度 ,sizeof 计算实际所占内存的长度
3)思考:strlen长度的大小‘\0‘

char arr[10] = “abc”

2.字符串拷贝函数 strcpy == string copy
记事本command + c 和comand + v

相关说明:使用注意

strncpy(dst,src,n) 将src中得前n字符copy到src

思考:strncpy拷贝后是否会包含结束符
练习:实现一个字符串拷贝模块

3.单个字符的查找
记事本中查找一个字符为例子

<a>str ch r 字符查找函数
strchr 查找字符第一次出现的地址,根据地址可以计算数组的下标,或者从指定字符输出。

<b>strrchr 查找字符最后一次出现的地址
char *p1 = strrchr(a,c);
printf("%s",p1);
练习:
输入一个字符串,再输入一个字符,查找并打印第一次出现和最后一次出现的字符并输出该字符的地址
char CHAR

4.strstr 字符串查找到 [在记事本中查找一个单词]

(a) strstr字符串查找函数
(b) str case str 字符串查找函数,不区分大小写

5.strcmp字符串比较函数
手机通信录联系人的排序 和 查找联系人
str cmp 字符串比较函数

int strcmp(const char *s1,const char *s2)
string compare 其作用是比较字符串s1,s2

从左到右逐个字符进行比较返回值不相同的那个字符ascii码差值

功能相似函数:
strcmp,
strcasecmp
strncmp,
strncasecmp

int strncmp(const char *s1, const char *s2, int n);
1)比较顺序:s1是否和s2相同
2)比较结果:0为相同,非0为不同,并且返回对应的差值
思考:非0的结果表示什么
3)思考:当s1比s2长度长的话会如何
返回s1最后一个字符和s2结束符的差
练习:
1.编写一个模拟登陆程序,输入用户名和密码,判断用户名和密码
是否和所设定的一致

2.编写一个验证程序,判断用户输入的字符串是否以qianfeng开头

6.strcat字符串连接
将一个文本copy到另一个文本的后面。
strcat 字符串连接函数 其做用是连接两个字符串

char * strcat(char *str1,char *str2)
【相关说明】:连接原理

char a[30] = "qianfeng"
char b[ ] ="hulian"
strcat(a,b);
puts(a);

char * strcat(char *str1,char *str2, n ); //将str2 中前N个字符连接到str1后面
strcat,strncat
练习:先输入自己的姓,再输入名字,最后将连接好的名字输出

需求:用户现在需要按照一定的格式分割一个字符串

7.字符串分割函数

1)strtok使用
char * strtok(char *str,const char *delim);
//分解一组字符串,str是要分解的字符串,delim为分个字符串 ,首次调用时,str要指向要分割的字符串,之后再次调用时要把str设为NULL ,strtok在str中查找到delim字符并用‘\0‘
来替换,直到找遍整个字符串。
1>要分割的内容
2>分割符,分割标记
2)如何获取下一个字符串
3)注意
0>不能截取字符串常量
1>截取后的长度
2>如果在下一次截取前截取另外一个字符串会如何
练习:
1.192.168.88.8
2.查找字符串中的最长单词,并且输出该单词

=====================================
常用字符串处理函数的实现
1.字符处理函数的实现
2.字符串处理函数的实现
strlen
int mystrlen(const char *str);

char* mystrcpy(char *dst, const char *src)

char *mystrchr(char *str, int c);

char *mystrrchr(char *str, int c);
====================================
sprintf和sscanf

需求:用户需要将每个用户的信息按照以下格式输出
1.字符串格式化函数
1)sprintf使用
2)printf和sprintf对比
int sprintf(const char *s, const char *fmt, …)

时间: 2024-10-22 19:41:18

C语言-->(十三)字符串的相关文章

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

iOS开发入门 ? C语言(字符串、字符串数组、命令行参数)

字符串 1. 概念 用双引号引起来的就是字符串 "a string" //C语言编译器会将两个并列的字符串自动拼接成一个字符串 "a string""another a string" // \是换行连接的标记(一行不够写) "a looooooooooong \ string" 常见ASCII编码: 'A' == 65    'a' == 97    '0' == 48    '\0' == 0 int a[10]; //表

C语言之字符串处理函数

C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为puts(字符串组) 作用:将一个字符串输出到终端.如,char一个string,并赋予初值.调用puts(string);进行字符串的输出. 2.gets函数——输入字符串的函数 一般的形式:gets(字符数组) 作用:从终端输入一个字符串到字符数组,并且得到一个函数值成为字符数组的起始地址. ge

D语言中字符串的操作

字符串的操作在软件开发中是特别重要的一个事情,因为基本上的编程都会使用到字符串,字符串操作的好坏决定着一个语言的好与差.在我做过的一个项目中曾经就出现过字符串操作性能问题. D语言字符串有 string,wstring,dstring三种类型,在D语言中字符串是使用字符数组定义的,三种类型分别对应char,wchar,dchar.char只有一个字节,wchar为双字节,dchar为三字节.对字符串的操作也相当于是对数组的操作,这跟其它语言不一样,C++中字符串是以string类来进行封装,它的

C语言学习 —— 字符串的学习(一)

这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定义 字符串 ,所以使用 字符数组 来存储和调用字符数据. 1.字符数组的定义和使用 char ch[50];//定义一个长度为50的字符串数组 定义字符串时需要定义字符串的长度,但是如果在定义的同时对字符串进行赋值 则不需要定义长度,代码如下 char ch[] = "I love QIAN&quo

c语言常见字符串函数经典实现

最近把一些常见的c语言的字符串库函数参照着网上的程序自己实现了一下,也是方便自己复习总结,里面的实现比较经典,下面的函数在我电脑vs2005上都能通过,但未进行严格的测试.点击展开目录,可以直接达到感兴趣的函数实现. /************************************************************************/ /* 1.strcpy函数实现 2.strncpy实现 3.strcat函数实现 4.strncat函数实现 5.strdup实现

C语言之字符串

由于C语言里面没有字符串,所以要输入和输出字符串,就用数组代替了 也可以用 gets void String_003() { char str[50]; gets(str); printf("%s",str); } 记得,在字符串的后面要加一个 /0  否则,可能会加入一些其他的数组 C语言之字符串

C语言里字符串的解析

原文网摘:http://www.cnblogs.com/yi-meng/p/3620244.html#undefined 根据给定的字符串,按照一定规则解析字符串,卡住好几次,这次做个笔记,以供参考 函数名称:   strtok 函数原型:   char *strtok(char *s1, const char *s2) 函数功能:   分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词) 函数返回:   字符串s1中首次出现s2中的字符前的子字符串指针 参数说明:   s

C语言的字符串转为OC中的字符串,控制台输入用户名和密码,判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败.

char name[20] = "";存储用户名 char code[20] = "";存储密码 printf("请输入用户名与密码"); scanf("%s%s", name, code); NSString *str1 = [NSString stringWithFormat:@"%s", name ]; NSString *str2 =[NSString stringWithFormat:@"