前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[C语言日寄] 字符串操作函数的使用及其拓展

[C语言日寄] 字符串操作函数的使用及其拓展

作者头像
siy2333
发布于 2025-03-07 03:28:02
发布于 2025-03-07 03:28:02
7300
代码可运行
举报
文章被收录于专栏:来自csdn的博客来自csdn的博客
运行总次数:0
代码可运行

前言

在C语言中,字符串是程序设计中不可或缺的一部分。C语言本身并没有提供专门的字符串类型,而是通过字符数组来实现字符串操作。为了方便对字符串进行处理,C语言标准库提供了丰富的字符串操作函数。今天,我们就通过一个简单的程序来深入探讨字符串操作函数的使用,以及它们在C语言中的重要性。

题目引入

下面是一个简单的程序,它的输出结果是:( )

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>

void print_string(const char *str) {
    printf("%s\n", str);
}

int main() {
    char str1[20] = "Hello";
    char str2[20] = "World";
    strcat(str1, str2);
    print_string(str1);
    return 0;
}

A. Hello B. World C. HelloWorld D. Hello World

在接下来的文章中,我们会一起把字符串操作函数的知识与题目结合起来,学习这一知识点。

知识点分析

1. 字符串的基本概念

在C语言中,字符串是以字符数组的形式存储的,以空字符(\0)作为结束标志。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[] = "Hello";

这里,str 是一个字符数组,包含 6 个字符:'H''e''l''l''o' 和一个空字符 '\0'。空字符是字符串的终止符,用于标识字符串的结束。

2. 常用字符串操作函数

C语言标准库 <string.h> 提供了丰富的字符串操作函数,以下是一些常用的函数及其功能:

(1)字符串拷贝函数:strcpy()

strcpy() 函数用于将一个字符串拷贝到另一个字符串中。其函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *strcpy(char *dest, const char *src);
  • dest 是目标字符串,src 是源字符串。
  • 该函数会将 src 中的字符串(包括终止符 \0)拷贝到 dest 中。
  • 返回值是目标字符串的首地址。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char src[] = "Hello";
char dest[20];
strcpy(dest, src);
printf("%s\n", dest); // 输出:Hello
(2)字符串连接函数:strcat()

strcat() 函数用于将一个字符串连接到另一个字符串的末尾。其函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *strcat(char *dest, const char *src);
  • dest 是目标字符串,src 是源字符串。
  • 该函数会将 src 中的字符串(不包括终止符 \0)连接到 dest 的末尾。
  • 返回值是目标字符串的首地址。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str1[20] = "Hello";
char str2[] = "World";
strcat(str1, str2);
printf("%s\n", str1); // 输出:HelloWorld
(3)字符串比较函数:strcmp()

strcmp() 函数用于比较两个字符串的大小。其函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int strcmp(const char *str1, const char *str2);
  • 如果 str1str2 相等,返回 0。
  • 如果 str1 小于 str2,返回负值。
  • 如果 str1 大于 str2,返回正值。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
printf("%d\n", result); // 输出:负值
(4)字符串长度函数:strlen()

strlen() 函数用于计算字符串的长度(不包括终止符 \0)。其函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
size_t strlen(const char *str);

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[] = "Hello";
size_t length = strlen(str);
printf("%zu\n", length); // 输出:5
(5)字符串查找函数:strstr()

strstr() 函数用于在一个字符串中查找另一个字符串的首次出现位置。其函数原型为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *strstr(const char *haystack, const char *needle);
  • haystack 是被搜索的字符串,needle 是要查找的子字符串。
  • 如果找到子字符串,返回子字符串的首地址;否则返回 NULL

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[] = "Hello World";
char *result = strstr(str, "World");
if (result) {
    printf("Found: %s\n", result); // 输出:Found: World
} else {
    printf("Not found\n");
}

3. 字符串操作函数的底层实现

为了更好地理解字符串操作函数的工作原理,我们可以简单分析一下它们的底层实现。

(1)strcpy() 的实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *strcpy(char *dest, const char *src) {
    char *tmp = dest;
    while ((*tmp++ = *src++) != '\0');
    return dest;
}
  • 通过一个循环,逐个拷贝源字符串中的字符到目标字符串中,直到遇到终止符 \0
  • 返回目标字符串的首地址。
(2)strlen() 的实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
size_t strlen(const char *str) {
    const char *tmp = str;
    while (*tmp++);
    return tmp - str;
}
  • 通过一个循环,逐个遍历字符串中的字符,直到遇到终止符 \0
  • 返回字符串的长度。

注意事项

1. 字符串数组的空间大小

在使用字符串操作函数时,必须确保目标字符串数组有足够的空间来存储结果。例如,在使用 strcpy()strcat() 时,目标字符串数组的大小必须大于或等于源字符串的长度加上终止符 \0 的大小。

错误示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char src[] = "Hello World";
char dest[5];
strcpy(dest, src); // 错误:dest 空间不足

正确示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char src[] = "Hello World";
char dest[20];
strcpy(dest, src); // 正确:dest 空间足够

2. 字符串的终止符 \0

在处理字符串时,必须确保字符串以终止符 \0 结尾。否则,可能会导致未定义行为,例如在使用 strlen()printf() 时,程序可能会读取超出字符串范围的内存。

错误示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[5] = {'H', 'e', 'l', 'l', 'o'};
printf("%s\n", str); // 错误:str 没有终止符

正确示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("%s\n", str); // 正确:str 有终止符

3. 避免使用 gets() 函数

gets() 函数用于从标准输入读取一行字符串,但它不会检查目标缓冲区的大小,容易导致缓冲区溢出。因此,gets() 函数已经被废弃,建议使用更安全的替代函数,如 fgets()

错误示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
gets(str); // 错误:容易导致缓冲区溢出

正确示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
fgets(str, sizeof(str), stdin); // 正确:更安全的替代

4. 字符串函数的返回值

在使用字符串函数时,需要注意它们的返回值。例如,strcpy()strcat() 返回目标字符串的首地址,而 strcmp() 返回一个整数值。正确使用返回值可以避免潜在的错误。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str1[20] = "Hello";
char str2[] = "World";
char *result = strcat(str1, str2);
printf("%s\n", result); // 输出:HelloWorld

拓展应用

1. 字符串反转

字符串反转是一个常见的应用场景,可以通过字符串操作函数实现。以下是一个简单的字符串反转函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>

void reverse_string(char *str) {
    int length = strlen(str);
    for (int i = 0; i < length / 2; i++) {
        char temp = str[i];
        str[i] = str[length - i - 1];
        str[length - i - 1] = temp;
    }
}

int main() {
    char str[] = "Hello";
    reverse_string(str);
    printf("%s\n", str); // 输出:olleH
    return 0;
}

2. 字符串加密

字符串加密可以通过简单的字符替换实现。以下是一个简单的加密函数,将每个字符向后移动一个位置(字母表循环):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>

void encrypt_string(char *str) {
    int length = strlen(str);
    for (int i = 0; i < length; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = (str[i] - 'a' + 1) % 26 + 'a';
        } else if (str[i] >= 'A' && str[i] <= 'Z') {
            str[i] = (str[i] - 'A' + 1) % 26 + 'A';
        }
    }
}

int main() {
    char str[] = "Hello";
    encrypt_string(str);
    printf("%s\n", str); // 输出:Ifmmp
    return 0;
}

3. 字符串分割

字符串分割可以通过 strtok() 函数实现。以下是一个简单的字符串分割示例,将字符串按空格分割:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello World This is C";
    char *token = strtok(str, " ");
    while (token) {
        printf("%s\n", token);
        token = strtok(NULL, " ");
    }
    return 0;
}

4. 字符串去重

字符串去重可以通过遍历字符串并删除重复字符实现。以下是一个简单的字符串去重函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>

void remove_duplicates(char *str) {
    int length = strlen(str);
    for (int i = 0; i < length; i++) {
        for (int j = i + 1; j < length; j++) {
            if (str[i] == str[j]) {
                for (int k = j; k < length - 1; k++) {
                    str[k] = str[k + 1];
                }
                length--;
                j--;
            }
        }
    }
}

int main() {
    char str[] = "aabbccddeeff";
    remove_duplicates(str);
    printf("%s\n", str); // 输出:abcdef
    return 0;
}

总结

字符串操作函数是C语言中非常重要的工具,它们可以帮助我们高效地处理字符串。 关注窝,每三天至少更新一篇优质c语言题目详解~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【c语言】字符串函数和内存函数
在编程的过程中,我们经常要对字符串和内存进行各种各样的处理,c语言提供了一系列字符串函数和内存函数,便于我们对字符串或者内存空间进行操作。本篇文章我们就来学习其中的一些函数。
ephemerals__
2024/10/24
1340
【c语言】字符串函数和内存函数
【C语言】字符串操作函数详解
在C语言中,字符串是以 null 终止的字符数组。要使用字符串操作函数,首先需要包含相应的头文件:
LuckiBit
2024/12/11
2000
【C语言】字符串操作函数详解
初学者对C语言的爱恨情仇之神秘的字符串
本文是针对对字符串有疑惑的初学者。例如:对C语言中的字符串并不了解,不太会使用。学过其他编程语言,现在转入了C语言,但是在C语言中使用字符串时不能像Java一样如愿以偿,自由自在的使用。那么就可以看本篇文章,本篇文章不会涉及太深的东西,太深的东西对于初学者会受不了的。
手撕代码八百里
2021/08/05
7220
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数
半截诗
2024/10/09
1750
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
字符和字符串操作函数总结
c语言中有一系列的函数是专门做字符分类的, 也就是一个字符是属于什么类型的字符的, 这些函数的使用都需要包含一个头文件是 ctype.h
用户11317877
2024/10/16
1100
字符和字符串操作函数总结
C语言常用的字符串函数及案例
ASCII C把这些函数原型放在string.h头文件中,其中最常用的有strlen()、strcat()、strcmp()、strncmp()、strcpy()、strncpy()和放在stdio.h中的springf()
CtrlX
2023/03/21
9800
C语言(字符、字符串函数)1
C语言中有一些专门作字符分类的函数,使用这些函数需要包含头文件 ctype.h 。
_小羊_
2024/10/16
1070
C语言(字符、字符串函数)1
C语言中常见库函数(1)——字符函数和字符串函数
在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了⼀系列库函数,接下来我们就学习一下这些函数。
Crossoads
2024/10/21
1190
C语言中常见库函数(1)——字符函数和字符串函数
字符串函数的介绍与模拟实现(一)
strlen函数是求字符串长度的函数,其使用需要包含头文件,其返回值是**‘/0’**前所有的字符数量,函数的返回值为无符号(size_t)类型整数
用户11029103
2024/03/19
980
【C语言】字符函数和字符串函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。 这些函数的使用都需要包含一个头文件是 <ctype.h>
用户11290673
2024/09/25
990
【C语言】字符函数和字符串函数
C语言字符函数与字符串函数超详解
在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了一系列库函数,接下来我们就了解一下这些函数。
fhvyxyci
2024/09/24
880
C语言字符函数与字符串函数超详解
【C进阶】——详解10个C语言中常见的字符串操作函数及其模拟实现
strlen是库函数,我们要知道库函数的参数和它的功能是C语言标准规定好的,那我们怎么看它的参数是什么呢?
YIN_尹
2024/01/23
9130
【C进阶】——详解10个C语言中常见的字符串操作函数及其模拟实现
C语言进阶——字符串&&内存函数
  这是牛客网上的一道简单题:判断输入字符是否为字母,一般的解决方法是通过ASCII码判断,不过这样做的话判断表达式较长,此时我们可以利用C语言中的库函数isalpha(判断是否为字母) 来完成这个题目,不仅代码量少,而且通俗易懂。要实现这种效果,就需要学习C语言中的各种库函数,而本文会列出大多数字符串函数和内存函数的使用及其实现,如果你想学习C语言库函数或对字符串、内存有好奇之心,不妨仔细来看看吧!🎉🎉🎉
北 海
2023/07/01
5070
C语言进阶——字符串&&内存函数
字符串和内存函数(1)
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串或者字符数组中;字符串常量适用于那些对它不做修改的字符串函数。
waves浪游
2024/01/22
1270
字符串和内存函数(1)
【C语言】字符串函数「超详细」
🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^ 星级博主~掘金⇿InfoQ创作者~周榜54»总榜2999🏅 🆔本文由 謓泽 原创 CSDN首发 🙉 如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客💬 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏-【C】系列_謓泽的博客-CSDN博客🎓 📢本文 de 创作时间  ⇨
謓泽
2022/12/12
1.4K0
【C语言】字符串函数「超详细」
C语言——字符函数与字符串函数
C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的,而这些函数的使用的需要包含一个头文件<ctype.h>
迷迭所归处
2024/11/19
820
C语言——字符函数与字符串函数
库函数之字符函数与字符串函数(上)
1.对于**const关键字,**这位博主讲的十分详细. const介绍 2.assert函数简单介绍. 函数名:断言函数 头文件:
初阶牛
2023/03/13
2970
库函数之字符函数与字符串函数(上)
C语言字符(串)函数
在我们写代码的过程中呢,经常会遇到一些处理字符和字符串的问题,比如将大小写字母的转换,计算字符串长度等,为了方便操作这些字符和字符串,C语言标准库提供了一些库函数,接下来就学习一下这些字符和字符串函数
星辰与你
2024/10/17
1310
C语言字符(串)函数
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
前段时间也是把指针较为详细系统的讲解完毕,接下来介绍一个全新的知识点,就是字符函数和字符串函数
是Nero哦
2024/01/18
2540
c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))
抽丝剥茧C语言(高阶)字符函数和字符串函数+练习
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。 字符串常量适用于那些对它不做修改的字符串函数。 注意:英文部分是网站上的资料 链接: cplusplus
有礼貌的灰绅士
2023/03/28
3800
抽丝剥茧C语言(高阶)字符函数和字符串函数+练习
推荐阅读
相关推荐
【c语言】字符串函数和内存函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验