关于字符数组中删除某个字符,删除多个字符,删除某个字符串的问题

这几个问题困扰了我好多天,费了我很多心血,话不多说,下面给大家分享我的总结:

字符串中删除某个字符

我学习了很多种方法,总结了一种比较简便的方法,如下图:

输入样例:

flagflag
a

输出样例:

flgflg
#include<stdio.h>
#include<string.h>
//删除一个字符串中的指定字符
void delate(char x[], char y)
{
	int i = 0,j = 0,t = 0, len = strlen(x);
	for (i = 0; i < len; i++)
	{
		if (x[i] == y)//如果某一项等于要删除的那一项,
		{
			for (j = i; j < len+1; j++)//把之后的所有项依次往前一个
			{                          //最后一项是把"/0"往前一位
				t = x[j];
				x[j] = x[j + 1];
				x[j + 1] = t;
			}
		}
	}
	puts(x);
}
int main(void)
{
	char a[20], b;
	gets_s(a);
	scanf("%c", &b);/*输入字符串和要删除的字符*/
	delate(a, b);/*调用函数*/
	return 0;
}

这是一个普通的调用函数的写法,我尝试着用指针?写一下。

#include<stdio.h>
#include<string.h>
void delate(char* x, char y)
{
	int i = 0, j = 0, t = 0, len = strlen(x);
	for (i = 0; i < len; i++)
	{
		if (*(x + i) == y)
		{
			for (j = i; j < len + 1; j++)
			{
				t = *(x + j);
				*(x + j) = *(x + j + 1);
				*(x + j + 1) = t;
			}
		}
	}
	puts(x);
}
int main(void)
{
	char a[20], b;
	gets_s(a);
	scanf("%c", &b);
	char* p = a;
	delate(p, b);
}

OK,成功,大差不差,思路一样,只是写法不一样。

字符串中删除某个子串

毫无头绪,我参考了下面博主的文章,大家可以点击链接跳转,里面有比较详细的解释
https://blog.csdn.net/u011779517/article/details/103366593

输入样例:

flaagglf
ag

输出样例: 

fllf
#include<stdio.h>
#include<string.h>
int main(void)
{
	char str1[100], str2[100];
	gets_s(str1);
	gets_s(str2);
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	int i, j, k;
	int flag = 1;//flag控制while循环,判断是否重复寻找要删除的子串
	int f;
	while(flag)
	{
		for (i = 0; i < len1; i++)
		{
			flag = 0;//假设没有找到要删除的子串结束循环
			if (str1[i] == str2[0])
			{
				f = 1;//默认从第i个字符开始的字符串符号要求
				for (j = i, k = 0; k < len2; j++, k++)//如果不符合要求,则f=0,循环停止
				{
					if (str1[j] != str2[k])
					{
						f = 0;
						break;
					}
				}
				if (f)//如果符号要求,则执行删除子串操作
				{
					flag = 1;
					for (; j < len1; i++, j++)//省略的部分:就是j=i+要删除子串的长度
					{
						str1[i] = str1[j];//相当于字符串abcdefgh要删除cde,然后把c替换为f,d替换为g,e替换为h
					}
					for (; i < len1; i++)
					{
						str1[i] = '\0';//由上面例子替换之后abfgh,然后把后面的都赋值为\0
					}
					break;//返回开始,重新寻找
				}
			}
		}
		len1=strlen(str1);//重新计算字符串的长度
	}
	puts(str1);
	return 0;
}

字符串中删除多个字符

原理和删除单个字符一样,只不过把删除单个字符的函数重复执行。

我练习了一个删除俩个字符的函数:

输入样例:

agdagdagd
ag

输出样例:

ddd
#include<stdio.h>
#include<string.h>
//删除一个字符串中的俩个指定字符
void delate2(char x[], char q)
{
	int i = 0, j = 0, t = 0, len = strlen(x);
	for (i = 0; i < len; i++)
	{
		if (x[i] == q)//如果某一项等于要删除的那一项,
		{
			for (j = i; j < len + 1; j++)//把之后的所有项依次往前一个
			{                          //最后一项是把"/0"往前一位
				t = x[j];
				x[j] = x[j + 1];
				x[j + 1] = t;
			}
		}
	}
}
void delate1(char x[], char y,char z)
{
	delate2(x, z);
	int i = 0,j = 0,t = 0, len = strlen(x);
	for (i = 0; i < len; i++)
	{
		if (x[i] == y)//如果某一项等于要删除的那一项,
		{
			for (j = i; j < len+1; j++)//把之后的所有项依次往前一个
			{                          //最后一项是把"/0"往前一位
				t = x[j];
				x[j] = x[j + 1];
				x[j + 1] = t;
			}
		}
	}
	puts(x);
}
int main(void)
{
	char a[20], b,c;
	gets_s(a);
	scanf("%c%c", &b,&c);/*输入字符串和要删除的字符*/
	delate1(a, b,c);/*调用函数*/
	return 0;
}

posted @   gzynuli  阅读(38)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示