创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
目录
- 一、组件化封装的意义
- 二、字符串相关的常用函数组件化封装:
- 总代码文件:
- 头文件string_pro.h:
- 源文件string_pro.cpp
- 用例测试:
- 三、 本文中所有函数功能列表:
- c语言字符串所有知识点总结:
一、组件化封装的意义
组件化封装就是将平时常用的一些函数,根据经验归纳总结到一个文件中,便于以后再次使用。
1.提升代码复用性:组件化封装可以将一些通用的、经常使用的功能和界面进行封装,以供其他模块或项目复用,减少重复工作,提升开发效率。
2.降低维护成本:组件化封装使代码模块化,一旦封装好了某一个功能或界面,就可以在不同的项目中复用。这样可以减少代码冗余,降低维护成本。
3.提高代码可读性和可维护性:不同的组件之间有着清晰的接口和依赖关系,代码的逻辑更加清晰,易于维护和扩展。
4.促进团队合作。
二、字符串相关的常用函数组件化封装:
总代码文件:
头文件string_pro.h:
#pragma once
#include <string.h>
#include <stdlib.h>
/*
功能:判断一个字符串中是否包含另一个字符串
参数:str:目标字符长串
substr:被查找的短字符串
返回:0 不包含 1包含
简例:int a = contains("TianXi Studio","TianXi");
返回 1;
*/
int contains(const char* str,const char *substr) ;
/*
功能:判断一个字符串的开头是否与另一个字符串相同
参数:str 目标字符串 substr被比较字符串
返回:0 否 1 是
简例:int a =startsWith("TianXi Studio","Tian");
返回值:1
*/
int startsWith(const char* str,const char *substr);
/*
功能:判断一个字符串的结尾是否与另一个字符串相同
参数:str 目标字符串 substr被比较字符串
返回:0 否 1 是
简例:int a =endsWith("TianXi Studio","Studio");
返回值:1
*/
int endsWith(const char* str,const char *substr);
/*
功能:从一个字符串前面寻找另一个字符串首次出现的下标
参数:str目标字符串,substr寻找字符串
返回:下标位置
简例:int a= strIndexOf("Tian Xi is coding","is");
返回值:8
*/
int strIndexOf(const char* str,const char* substr) ;
/*
功能:在一个字符串str前面开始寻找字符c首次出现的下标
参数:str目标字符串,c 被寻找的字符
返回:下标位置
简例:int a= charIndexOf("Tian Xi is coding",'i');
返回值:1
*/
int charIndexOf(const char* str,char c) ;
/*
功能:从一个字符串尾部开始寻找另一个字符串首次出现的下标
参数:str目标字符串,substr寻找字符串
返回:下标位置
简例:int a= strLastIndexOf("Tian Xi is coding","Xi");
返回值:6
*/
int strLastIndexOf(const char* str,const char* substr) ;
/*
功能:在一个字符串str尾部开始寻找字符c首次出现的下标
参数:str目标字符串,c 被寻找的字符
返回:下标位置
简例:int a= charLastIndexOf("Tian Xi is coding",'i');
返回值:15
*/
int charLastIndexOf(const char* str,char c) ;
/*
功能:判断一个字符串是否空串
参数:str被检测的字符串
返回:0 不是 1 是
简例:int a = isEmpty("");
返回值 1
*/
int isEmpty(const char* str) ;
/*
功能:去掉字符串中的所有空格
参数:str 需要去掉空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi ";
trimAll(s)
返回值:TianXi
*/
char* trimAll(char* str) ;
/*
功能:只去掉字符串左侧的所有空格
参数:str: 需要去掉左侧空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi Studio ";
leftTrim(s)
返回值:Tian Xi Studio |
*/
char* leftTrim(char* str) ;
/*
功能:只去掉字符串右侧的所有空格
参数:str: 需要去掉右侧空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi Studio ";
rightTrim(s)
返回值: Tian Xi Studio|
*/
char* rightTrim(char* str) ;
/*
功能:把字符串的字母全部转换成大写
参数:str被变大写的字符串
返回:处理后的str
简例:
char s[] = "tian xi";
toUpperCase(s);
返回值: TIAN XI
*/
char* toUpperCase(char* str ) ;
/*
功能:把字符串的字母全部转换成小写
参数:str被变小写的字符串
返回:处理后的str
简例:
char s[] = "TIAN XI";
toUpperCase(s);
返回值: tian xi
*/
char* toLowerCase(char* str ) ;
/*
功能:忽略大小写字母,比较两个字符串的大小
参数:str1 str2 两个比较的字符串
返回:1 大于关系 0 等于关系 -1小于关系
简例:int a=strcmpIgnorecase("Tian xi","tian xi");
返回值:0
*/
int strcmpIgnorecase(const char* str1,const char *str2) ;
/*
功能:对一个字符串进行翻转
参数:str被翻转的字符串
返回:翻转处理后的str
简例:char s[] ="12345";
返回值:54321
*/
char* reserveStr(char *str);
/*
功能:把一个s字符串重复连接n次后存放到d字符串
参数:d最终结果字符串,s被重复的字符串 n 重复的次数
返回:d最终结果字符串
简例:char d[50];
repeat(d,"TianXi!",3);
返回值:TianXi!TianXi!TianXi!
*/
char* repeat(char* d,const char *s ,int n) ;
/*
功能:把一个长串中的一段字符串复制到另一个字符串。
参数:s 长串 from从 to到(但不包括) d存放位置
返回:d字符串的结果
简例:char d[20];
substr("TianXi",2,5,d);
返回值:anX
*/
char* substr(const char* s,int from ,int to,char * d) ;
/*
功能:把sub字符串插入到str的指定下标位置
参数:str目标字符串 sub被插入的子串 index 插入点下标。
返回:处理后的str
简例:
char s[50]="TianXi coding";
insert(s,"is ",6);
返回值:TianXi is coding
*/
char* insert(char* str,const char *sub,int index) ;
/*
功能:把字符串中指定下标的字符删除掉
参数:str目标字符串,index 被删除下标
返回:处理后的str
简例:char s[]="Tian Xi";
deleteCharAt(s,1);
返回值:Tan Xi
*/
char* deleteCharAt(char* str,int index) ;
/*
功能:把str字符串中的一段字符删除掉
参数:str被删除的字符串 from删除开始点 to 结束点(但不包括)
返回:处理后的str
简例:
char s[]="Tian Xi";
deleteSubstr(s,0,5);
返回值:xi
*/
char* deleteSubstr(char* str,int from ,int to) ;
/*
功能:把字符串str的一小段字符替换成另一个字符串sub
参数:str目标字符串 from起始点,to结束点(但不包括) sub替换的内容
返回:处理后的str
简例:
char s[50]="Tian Xi";
replace(s,2,4,"xi");
返回值:Tixi Xi
*/
char* replace(char* str,int from ,int to,const char * sub);
/*
功能:把字符串str中的某些部分替换成另外的字符串
参数:str目标字符串 oldsub原来的内容 newsub 新的内容
返回:处理后的str
简例:
char s[50]="Tian Xi Studio";
replaceAll(s,"Studio","is coding");
返回值:Tian xi is coding
*/
char* replaceAll(char* str,const char *oldsub,const char* newsub) ;
源文件string_pro.cpp
#include "string_pro.h"
/*
功能:判断一个字符串中是否包含另一个字符串
参数:str:目标字符长串
substr:被查找的短字符串
返回:0 不包含 1包含
简例:int a = contains("TianXi Studio","TianXi");
返回 1;
*/
int contains(const char* str, const char* substr)
{
return strstr(str, substr) != NULL;
}
/*
功能:判断一个字符串的开头是否与另一个字符串相同
参数:str 目标字符串 substr被比较字符串
返回:0 否 1 是
简例:int a =startsWith("TianXi Studio","Tian");
返回值:1
*/
int startsWith(const char* str, const char* substr)
{
return strstr(str, substr) == str;
}
/*
功能:判断一个字符串的结尾是否与另一个字符串相同
参数:str 目标字符串 substr被比较字符串
返回:0 否 1 是
简例:int a =endsWith("TianXi Studio","Studio");
返回值:1
*/
int endsWith(const char* str, const char* substr)
{
return strstr(str , substr)== str + strlen(str)-strlen(substr);
}
/*
功能:从一个字符串前面寻找另一个字符串首次出现的下标
参数:str目标字符串,substr寻找字符串
返回:下标位置
简例:int a= strIndexOf("Tian Xi is coding","is");
返回值:8
*/
int strIndexOf(const char* str, const char* substr)
{
return strstr(str, substr) - str;
}
/*
功能:在一个字符串str前面开始寻找字符c首次出现的下标
参数:str目标字符串,c 被寻找的字符
返回:下标位置
简例:int a= charIndexOf("Tian Xi is coding",'i');
返回值:1
*/
int charIndexOf(const char* str, char c)
{
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == c)
{
return i;
}
}
return -1;
}
/*
功能:从一个字符串尾部开始寻找另一个字符串首次出现的下标
参数:str目标字符串,substr寻找字符串
返回:下标位置
简例:int a= strLastIndexOf("Tian Xi is coding","Xi");
返回值:6
*/
int strLastIndexOf(const char* str, const char* substr)
{
return strstr(str, substr) - str;
}
/*
功能:在一个字符串str尾部开始寻找字符c首次出现的下标
参数:str目标字符串,c 被寻找的字符
返回:下标位置
简例:int a= charLastIndexOf("Tian Xi is coding",'i');
返回值:15
*/
int charLastIndexOf(const char* str, char c)
{
for (int i = strlen(str); i > 0; i--)
{
if (str[i] == c)
{
return i;
}
}
return 0;
//method 2
//char t[2] = {c};
//return strLastIndexOf(str,t);
}
/*
功能:判断一个字符串是否空串
参数:str被检测的字符串
返回:0 不是 1 是
简例:int a = isEmpty("");
返回值 1
*/
int isEmpty(const char* str)
{
return *str =='\0';
}
/*
功能:去掉字符串中的所有空格
参数:str 需要去掉空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi ";
trimAll(s)
返回值:TianXi
*/
char* trimAll(char* str)
{
char* p = str;
int len = 0;
while (*p)
{
if (*p != ' ')
{
str[len++] = *p;
}
p++;
}
str[len] = '\0';//清除后面内容
return str;
}
/*
功能:只去掉字符串左侧的所有空格
参数:str: 需要去掉左侧空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi Studio ";
leftTrim(s)
返回值:Tian Xi Studio |
*/
char* leftTrim(char* str)
{
char* p = str;
while (*p)
{
if (*p == ' ')
{
p++;
}
}
return strcpy(str, p);
}
/*
功能:只去掉字符串右侧的所有空格
参数:str: 需要去掉右侧空格的字符串
返回:处理后的str
简例:
char s[] = " Tian Xi Studio ";
rightTrim(s)
返回值: Tian Xi Studio|
*/
char* rightTrim(char* str)
{
char* p = str + strlen(str) - 1;
while (*p ==' ')
{
p--;
*(p + 1) = '\0';
}
return str;
}
/*
功能:把字符串的字母全部转换成大写
参数:str被变大写的字符串
返回:处理后的str
简例:
char s[] = "tian xi";
toUpperCase(s);
返回值: TIAN XI
*/
char* toUpperCase(char* str)
{
char* p = str;
while (*p)
{
if (*p >= 'a' && *p <= 'Z')
{
*p -= 32;
}
p++;
}
return str;
}
/*
功能:把字符串的字母全部转换成小写
参数:str被变小写的字符串
返回:处理后的str
简例:
char s[] = "TIAN XI";
toUpperCase(s);
返回值: tian xi
*/
char* toLowerCase(char* str)
{
char* p = str;
while (*p)
{
if (*p >= 'A' && *p <= 'Z')
{
*p += 32;
}
p++;
}
return str;
}
/*
功能:忽略大小写字母,比较两个字符串的大小
参数:str1 str2 两个比较的字符串
返回:1 大于关系 0 等于关系 -1小于关系
简例:int a=strcmpIgnorecase("Tian xi","tian xi");
返回值:0
*/
int strcmpIgnorecase(const char* str1, const char* str2)
{
char* p1 = (char*)malloc(sizeof(char) * strlen(str1) + 1); //+1是因为'\0'
strcpy(p1, str1);
toUpperCase(p1); //忽略大小写:统一变成大写
char* p2 = (char*)malloc(sizeof(char) * strlen(str2) + 1); //+1是因为'\0'
strcpy(p2, str1);
toUpperCase(p2);
int res = strcmp(p1, p2);
free(p1);
free(p2);
return res;
}
/*
功能:对一个字符串进行翻转
参数:str被翻转的字符串
返回:翻转处理后的str
简例:char s[] ="12345";
返回值:54321
*/
char* reserveStr(char* str)
{
char t;
for (char* p = str, *q = str + strlen(str) - 1; q > p; p++, q--)
{
t = *p;
*p = *q;
*q = t;
}
return str;
}
/*
功能:把一个s字符串重复连接n次后存放到d字符串
参数:d最终结果字符串,s被重复的字符串 n 重复的次数
返回:d最终结果字符串
简例:char d[50];
repeat(d,"TianXi!",3);
返回值:TianXi!TianXi!TianXi!
*/
char* repeat(char* d, const char* s, int n)
{
d[0] = '\0';
for (int i = 0; i < n; i++)
{
strcat(d, s);
}
return d;
}
/*
功能:把一个长串中的一段字符串复制到另一个字符串。
参数:s 长串 from从 to到(但不包括) d存放位置
返回:d字符串的结果
简例:char d[20];
substr("TianXi",2,5,d);
返回值:anX
*/
char* substr(const char* s, int from, int to, char* d)
{
int len;
for (len = 0; len < to - from; len++)
{
d[len] = s[from + len];
}
d[len] = '\0';
return d;
}
/*
功能:把sub字符串插入到str的指定下标位置
参数:str目标字符串 sub被插入的子串 index 插入点下标。
返回:处理后的str
简例:
char s[50]="TianXi coding";
insert(s,"is ",6);
返回值:TianXi is coding
*/
char* insert(char* str, const char* sub, int index)
{
char* p = str + index;
char* temp = (char*)malloc(sizeof(char) * (strlen(p) + 1));
if (temp)
{
strcpy(temp, p);
*p = '\0';
strcat(str, sub);
strcat(str, temp);
free(temp);
}
return str;
}
/*
功能:把字符串中指定下标的字符删除掉
参数:str目标字符串,index 被删除下标
返回:处理后的str
简例:char s[]="Tian Xi";
deleteCharAt(s,1);
返回值:Tan Xi
*/
char* deleteCharAt(char* str, int index)
{
return strcpy(str + index, str + index + 1);
}
/*
功能:把str字符串中的一段字符删除掉
参数:str被删除的字符串 from删除开始点 to 结束点(但不包括)
返回:处理后的str
简例:
char s[]="Tian Xi";
deleteSubstr(s,0,5);
返回值:xi
*/
char* deleteSubstr(char* str, int from, int to)
{
return strcpy(str + from, str + to);
}
/*
功能:把字符串str的一小段字符替换成另一个字符串sub
参数:str目标字符串 from起始点,to结束点(但不包括) sub替换的内容
返回:处理后的str
简例:
char s[50]="Tian Xi";
replace(s,2,4,"xi");
返回值:Tixi Xi
*/
char* replace(char* str, int from, int to, const char* sub)
{
deleteSubstr(str, from, to);
return insert(str, sub, from);
}
/*
功能:把字符串str中的某些部分替换成另外的字符串
参数:str目标字符串 oldsub原来的内容 newsub 新的内容
返回:处理后的str
简例:
char s[50]="Tian Xi Studio";
replaceAll(s,"Studio","is coding");
返回值:Tian xi is coding
*/
char* replaceAll(char* str, const char* oldsub, const char* newsub)
{
char* p = str;
int from, to;
do
{
p = strstr(p, oldsub);
if (p)
{
from = p - str;
to = from + strlen(oldsub);
replace(str, from, to, newsub);
}
} while (p != NULL);
return str;
}
用例测试:
#include <stdio.h>
#include "string_pro.h"
#include <iostream>
using namespace std;
int main ()
{
//int a = contains("TianXi Studio", "TianXi");
//a = startsWith("TianXi Studio", "Tian");
//a = endsWith("TianXi Studio", "Studio");
//a = strIndexOf("Tian Xi is coding", "is");
//printf("%d\n", a);
//char s[] = "12345";
char d[50];
printf("%s\n", repeat(d, "TianXi!", 3));
return 0;
}
就是再同一项目下建立一个测试用的文件,输入函数的定义进行功能测试:
如果达到了预期效果,该函数就是编写成功
三、 本文中所有函数功能列表:
- contains:判断一个字符串中是否包含另一个字符串
- startsWith:判断一个字符串的开头是否与另一个字符串相同
- endsWith:判断一个字符串的结尾是否与另一个字符串相同
- strIndexOf:从一个字符串前面寻找另一个字符串首次出现的下标
- charIndexOf:在一个字符串前面开始寻找字符首次出现的下标
- strLastIndexOf:从一个字符串尾部开始寻找另一个字符串首次出现的下标
- charLastIndexOf:在一个字符串尾部开始寻找字符首次出现的下标
- isEmpty:判断一个字符串是否为空串
- trimAll:去掉字符串中的所有空格
- leftTrim:只去掉字符串左侧的所有空格
- rightTrim:只去掉字符串右侧的所有空格
- toUpperCase:把字符串的字母全部转换成大写
- toLowerCase:把字符串的字母全部转换成小写
- strcmpIgnorecase:忽略大小写字母,比较两个字符串的大小关系
- reserveStr:对一个字符串进行翻转
- repeat:把一个字符串重复连接n次后存放到另一个字符串
- substr:从一个长串中的一段字符串复制到另一个字符串。
- insert:把sub字符串插入到str的指定下标位置
- deleteCharAt:把字符串中指定下标的字符删除掉
- deleteSubstr:把str字符串中的一段字符删除掉
- replace:把字符串str的一小段字符替换成另一个字符串
本字符串函数功能组件可以被复用在平时的项目中。
如果有新的本人常用的字符串相关函数,我将会进行更新
c语言字符串所有知识点总结:
字符串的基本概念 | 字符串存储原理
字符串输出方式 | API仿真
字符串计算长度 | API仿真
字符串复制 | API仿真
字符串拼接 | API仿真
字符串比较 | API仿真
字符串匹配(搜索) | API仿真
字符串类型转换 | itoa函数的使用
字符串知识实现登录demo | 账号密码验证功能
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |