目录
在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提
供了一系列库函数,接下来我们就学习一下这些函数。
1.字符分类函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。
这些函数的使用都需要包含一个头文件是 <ctype.h>
这些函数的使用方法非常类似,我们就讲解一个函数的实例,其他的非常类似:
int islower ( int c );
islower 是能够判断参数部分的 c 是否是小写字母的。
通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返
回0。
练习:
写一个代码,将字符串中的小写字母转大写,其他字符不变。
#include <stdio.h>
#include <ctype.h>
int main ()
{
int i = 0;
char str[] = "Test String.\n";
char c;
while (str[i])
{
c = str[i];
if (islower(c))
c -= 32;
putchar(c);
i++;
}
return 0;
}
代码解释:
1. 头文件
- #include <stdio.h> :要用 putchar 输出字符,得包含这个标准输入输出头文件。
- #include <ctype.h> : islower 函数能判断字符是不是小写字母,它在这个字符处理头文件里。
2. main 函数
- 程序从这里开始。 int main 表示返回整数, return 0 说明程序正常结束。
3. 变量
- int i = 0 :当索引,用来挨个访问字符串字符。
- char str[] = "Test String.\n" :存要处理的字符串。
- char c :临时存从字符串取出的字符。
4. 循环处理
- while (str[i]) :只要字符不是结束符 '\0' ,就循环。
- c = str[i] :拿出当前字符放 c 里。
- if (islower(c)) :判断 c 是不是小写字母,是就执行下面。
- c -= 32 :小写字母ASCII码减32 ,变成大写字母。
- putchar(c) :把处理后的字符打印出来。
- i++ :准备处理下一个字符。
2.字符转换函数
C语言提供了2个字符转换函数:
int tolower ( int c ); //将参数传进去的大写字母转小写
int toupper ( int c ); //将参数传进去的小写字母转大写
上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用 tolower 函
数。
#include <stdio.h>
#include <ctype.h>
int main ()
{
int i = 0;
char str[] = "Test String.\n";
char c;
while (str[i])
{
c = str[i];
if (islower(c))
c = toupper(c);
putchar(c);
i++;
}
return 0;
}
代码解释:
1. 功能:把字符串里的小写字母转成大写并输出。
2. 头文件:
- stdio.h :用 putchar 打印字符。
- ctype.h :用 islower 查小写字母, toupper 转大写。
3. 变量:
- i :当“指针”,逐个访问字符串字符。
- str :存要处理的字符串(比如 "Test String.\n" )。
- c :临时存当前字符。
4. 过程:
- 逐个字符检查,是小写字母就转大写,然后打印。
- 直到遇到字符串结尾的 \0 才停止。
3.strlen的使用和模拟实现
size_t strlen ( const char * str );
- - 字符串以 '\0' 作为结束标志, strlen 函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
- - 参数指向的字符串必须要以 '\0' 结束。
- - 注意函数的返回值为 size_t ,是无符号的(易错)。
- - strlen 的使用需要包含头文件。
- - 学会 strlen 函数的模拟实现。
#include <stdio.h>
#include <string.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if(strlen(str2)-strlen(str1)>0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
代码解释:
1. 功能:比较两个字符串的长度并输出结果。
2. 头文件:
- stdio.h :用于输入输出( printf )。
- string.h :用于使用字符串长度函数 strlen 。
3. 变量:
- str1 指向字符串 "abcdef" (长度6)。
- str2 指向字符串 "bbb" (长度3)。
4. 逻辑:
- 计算 str2 长度减 str1 长度: 3-6 = -3 。
- 由于 -3 不大于0,输出 "srt1>str2" (注意代码中 srt1 是拼写错误,应为 str1 )。
strlen的模拟实现:
方式1:
//计数器方式
int my_strlen(const char * str)
{
int count = 0;
assert(str);
while(*str)
{
count++;
str++;
}
return count;
}
代码解释:
1. 函数功能:这个函数 my_strlen 用来计算传入字符串的长度,类似C语言标准库函数 strlen。
2. 参数 const char * str 表示传入一个指向字符常量的指针,即传入字符串的首地址, const 修饰意味着函数内不能通过这个指针修改字符串内容。
3. 变量 int count=0;定义一个整型变量 count 作为计数器,初始化为 0 ,用来统计字符串字符个数。
4. 断言 assert(str); 是一个断言宏,作用是在程序运行时检查 str 指针是否为空。如果 str 为空,程序会终止并报错,这能防止后续空指针解引用导致的程序崩溃。
5. 循环计数:
- while(*str):只要当前指针指向的字符( *str )不是字符串结束符 '\0' ,就执行循环体。
- count++;:每循环一次,计数器 count 加 1 ,统计字符数量。
- str++;:将指针向后移动一位,指向下一个字符,以便继续检查后续字符。
6. 返回值:return count;当循环结束,说明已经遍历完字符串,此时返回计数器 count 的值,也就是字符串的长度(不包含结束符'\0')。
4.strcpy的模拟和使用
char* strcpy(char * destination, const char * source );
- - 源字符串必须以 '\0' 结束。
- - 会将源字符串中的 '\0' 拷贝到目标空间。
- - 目标空间必须足够大,以确保能存放源字符串。
- - 目标空间必须可修改。
- - 学会模拟实现。
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, world!"; // 源字符串
char destination[20]; // 目标字符串数组,空间要足够容纳源字符串
// 使用strcpy函数将源字符串拷贝到目标字符串
strcpy(destination, source);
printf("拷贝后的字符串: %s\n", destination);
return 0;
}
代码解释:
1. 头文件引入
- #include<stdio.h>:用于使用输入输出函数,如printf。
- #include<string.h>: strcpy 函数的声明在这个头文件中,所以要引入。
2. 定义字符串
- char source[] = "Hello, world!"; : 定义并初始化源字符串。
- char destination[20]; :定义目标字符串数组,这里大小设为 20 ,确保能容纳源字符串(包括结束符'\0')。
3. 使用strcpy函数
strcpy(destination, source); : 将源字符串source拷贝到目标字符串destination,包括字符串结束符'\0'。
4. 输出结果
printf("拷贝后的字符串: %s\n", destination); : 使用printf函数输出拷贝后的目标字符串。
本篇内容先到这里,像这种函数还有多个,接下来再为大家一一显示,希望大家能深入理解,感谢
大家的观看!