相关文章推荐
捣蛋的皮带  ·  Python ...·  7 月前    · 
旅途中的羊肉串  ·  WPF ...·  11 月前    · 
冲动的梨子  ·  计算日期差【hive】 - ...·  1 年前    · 
//sub_before为str中sub所在位置的之前部分 //sub_after为str中sub所在位置的之后部分,包括sub void str_split(const char* str/*in*/,char* sub/*in*/,char** sub_before/*out*/,char** sub_after/*out*/){ if ( str == NULL || *str=='\0' || sub==NULL){ printf("function str_split error:( str == NULL || *str=='\0' || sub==NULL)"); return; if (*sub_before == NULL){ *sub_before = (char*)malloc(strlen(str)); if (*sub_after == NULL){ *sub_after = (char*)malloc(strlen(str)); //分割字符串的时候使用strstr函数,返回是第一个sub地址,如果没有匹配的则返回NULL char* temp = (char*)malloc(strlen(str)); strcpy(temp,str); *sub_after = strstr(temp, sub); //没有匹配的子串 if (*sub_after == NULL || **sub_after == '\0'){ printf("the str without sub"); return; //添加结束标志符 *(*sub_after + strlen(*sub_after)) = '\0'; //将字符串中sub之前的字符赋值给sub_before int i = 0; while (i < (strlen(temp)-strlen(*sub_after))){ *(*sub_before + i) = *(temp+i); //添加结束标志符,添加结束标志的目的是为了防止乱码 *(*sub_before + i) = '\0'; 二、去字符串的前后空格
//传入一个字符串,去除字符串前后的空格
//参数:
//str为需要去除空格的字符串
//newchar为去除空格之后的字符串
void trim_space(const char* str/*in*/,char* newchar/*out*/){
	if (str == NULL || *str == '\0' || newchar == NULL){
		printf("function trim_space error:(str==NULL || *str=='\0' || newchar == NULL)");
		return;
	//利用左右开弓来去除前后的空格
	int i = 0, j = strlen(str);
	//isspace函数是用来判断字符是否为空格
	//求出,在str字符串前面有多少个空格
	while (isspace(str[i]) || str[i]=='\0')
	//求出,在str字符串后面有多少个空格
	while (isspace(str[j]) || str[j]=='\0'){
	//从str+i个位置开始将(j-i+1)个字符拷贝到newchar中
	strncpy(newchar,str+i,j-i+1);
三、递归实现字符串的反转 
//通过函数的递归调用来实现字符串的反转
//参数:
//str:需要反转的字符串
//inverse_str:反转之后的字符串
void str_inverse(const char* str/*in*/,char* inverse_str/*out*/){
	//遇到异常情况,直接跳出方法
	if (str == NULL || inverse_str==NULL){
		printf("function str_inverse error:(str == NULL || inverse_str==NULL)");
		return;
	//递归的结束,当到str字符串结束的时候
	if (*str == '\0'){
		return;
	str_inverse(str+1,inverse_str);
	strncat(inverse_str,str,1);
void main(){//调用字符串反转
	char* s = "abcdefg";
	//char result[10] = {0};//这种方式可以调用成功
	//char* result = (char*)malloc(strlen(s));//这种会宕机(出现异常),原因是因为malloc函数不会初始化导致,因为开辟空间的时候只开辟了
//那么多,而后面使用strcat函数进行拼接,是直接在以前的基础上进行拼接,会出现,前面乱码,但是结果还是正确的
	char* result = (char*)calloc(strlen(s),1);
	str_inverse(s,result);
	cout << result << endl;
四、字符串的替换(下面的函数使用到了上面的字符串分割函数str_split) 
//字符串的替换
//参数:
//str:原字符串
//replace_str:要被替换的字符串
//replace_become:要替换成什么字符串
//replace_after:替换之后的字符串
void str_replace(const char* str/*in*/,char* replace_str/*in*/,char* replace_become/*in*/,char** replace_after/*out*/){
	//遇到异常情况直接退出
	if (str == NULL || *str == '\0' || replace_str == NULL || replace_str == '\0' || replace_become == NULL || *replace_become=='\0'){
		printf("function str_replace error:(str==NULL || *str =='\0' || replace_str==NULL || replace_str=='\0')");
		return;
	const char* flag = strstr(str,replace_str);
	//字符串str中没有子串
	if (flag==NULL){
		printf("the str without replace_str");
		return;
	//为结果开辟空间
	*replace_after = (char*)calloc(strlen(str)+strlen(replace_become)-strlen(replace_str),1);
	//通过字符串的分割之后进行拼接
	char *after = NULL, *before=NULL;
	while (flag){
		if (after == NULL){
			str_split(str, replace_str, &before, &after);
		else{
			str_split(after, replace_str, &before, &after);
		strcat(*replace_after,before);
		strcat(*replace_after,replace_become);
		after = after + strlen(replace_str);
		flag = strstr(after,replace_str);
	if (after != '\0'){
		strcat(*replace_after,after);
要想掌握好c语言中的指针,多做一下c语言中的字符串操作是最好的办法。 
                                    可以看到,截断字符串后,它的长度缩短了,因为'\0'字符之后的字符不会被打印。除此之外,我们还可以注意到,字符串空格字符不会影响字符串的长度或者截断操作。总之,在C语言字符串空格和'\0'字符是不同的,空格字符只是字符串的普通字符,而'\0'字符则表示字符串的结尾,同时它还是空字符。需要特别注意的是,当我们使用字符串相关的函数进行操作时,要考虑到结尾的'\0'字符。这个'\0'字符会告诉C语言字符串的结尾,同时也是空字符,如果字符串有'\0'字符,那么它将作为字符串的截止标志。
                                    在一些编程练习,经常会对字符串进行处理,往往处理之前都会对字符串进行分割来提取各部分信息。在C++虽然没有像python那样提供split这样直接的字符串分割函数,但也有一些其他的方法能够对其进行分割,下面介绍几种C++常用字符串分割方法。
通过string成员函数实现
在C++ string类,提供了两个成员函数可以用来实现字符串分割,一个是find函数,另一个是substr函数,下面看一下这两个函数的声明。find函数:
原型: size_t find (const string&
                                    1、头文件:#include <string.h>
2、定义函数:char * strtok(char *s, const char *delim);
分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串每个字符均为分割符)。
3、函数说明:
strtok()用来将字符串分割成一个个片段。参数s 指向欲分解的字符串,参数delim 则为分隔字符串;
当strtok()在参数s 的字符串发现到参数delim 的分割字符时则会将该字符改为...
                                    一、利用strtok()函数进行分割
函数头文件#iinclude<string.h>
函数原型:char *strtok(char s[], const char *delim);s[]是原字符串,delim为分隔符
返回:字符串拆分后的首地址。 “拆分”:将分割字符用 '\0’替换
1)strtok拆分字符串是直接在 原串 上操作,所以要求参1必须,可读可写(char *str = “www.baidu.com” 不行!!!)
2)第一次拆分,参1 传待拆分的原串。	第1+ 次拆分时
                                    1、split:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
2、indexOf() :返回某个指定的字符串值在字符串首次出现的位置(从左向右)。没有匹配的则返回-1,否则返回首次出现位置的字符串的下标值。
3、substr(start,length):表示从start位置开始,截取length长度的字符串。
4、substring(start,end):表示从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符。
5、lastIndexOf()方法返回
                                    找工作,面临着要笔试,而编程题的一些小的函数有时候又很需要,平时简单记一下小的函数,以后用到,直接复制粘贴就行。将字符串按照某个字符分割成若干个字符串,如"a,b,bbbb,ccc"按照‘,’分割成“a”、“b”、“bbbb”、“ccc”如“:a:b:d:”按照‘:’分割成 “空”“a”、“b”、“d”、“空”(注意,冒号在两端,所以有空)vector&lt;string&gt; split(co...
2、案例讲解
1、Strtok()函数详解:  该函数包含在"string.h"头文件
1) 函数原型: char* strtok (char* str,constchar* delimiters );
2) 函数功能: 切割字符串,将str切分成一个个子串
3) 函数参数:
str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
delimiters:表示切割字符串字符串每个字符都会 当作分