#include<stdio.h>//标准的输入和输出流
#include<stdlib.h>//system("pause")要用
char* func1(char str[],char ch);//具体实现的函数,注意返回值是一个char*的
int main(void)//车主函数
{
char str[99];//定义一个长度为99的字符串数组
char* str1 = '\0', * str2 = 'p';//定义两个指向字符串的指针,
//至于为什么要赋初值,因为指针的指向是不定的,
//可能会指向内存当中一块不允许指向的区域,
//也可能会指向内存当中有数据的地方,而这快区域是不允许我们引用的
//所以我们在定义的时候就必须初始化,防止野指针的出现
char ch;//定义一个字符
printf("请输入一串字符串\n");//提示用户输入相应信息
scanf_s("%s", str, 99);//将用户刚刚输入到缓冲区的信息读入
getchar();//将缓冲区的换行符读入,便于之后会出现错误,
//因为后续在读入字符的时候如果不用这个函数的话,
//就会将缓冲区的换行符读入,而不会将缓冲区的我们想要删除的字符读入
printf("请输入你要删除的字符\n");//提示用户输入相应信息
ch = getchar();//读入缓冲区的字符,也可以用scanf的形式进行读入
str1 = func1(str,ch);//调用函数,删除指定的字符,返回删除只当字符后剩余的字符串
printf("删除后的字符串为%s\n", str1);//打印输出删除指定字符后的字符串
system("pause");//将黑色窗口停留,用户按任意键后才会退出
return 0;//程序正常运行要返回一个0
}
char* func1(char str1[], char ch)
{
char* p = str1;
char* str2 = malloc(100);//注意在被调用函数要返回
//一空间是必须要用malloc来开辟空间,如果不开辟空间,
//那么在返回函数值的时候,该内存空间被释放,就不能得到
//我们处理后的值了
//要不就在主函数中传递参数进去
if (str2 == NULL)
{//注意在堆区开辟内存空间的时候一定要先判断是否申请到空间了,
//如果没有申请到空间,那么malloc函数会返回一个NULL,
//我们必须要先判断该指针是否申请到空间,因为c语言是不允许我们操作空指针的
printf("分配内存失败\n");//用于提示用户:申请空间失败
}
else
{
int j = 0;//进去这条分支说明指针在堆区已经分配到了内存空间了
while (*p != '\0')//直到指针所指向的那个元素是串结束符,就结束循环条件,退出循环
{
if (*p != ch)//p是一个执行字符串的指针,*p是对他解引用的形式,
//代表字符串中的某个字符
{
*(str2+j)= *p;//如果原先的字符串中的某个字符与我们待删除的字符不同,
//即不是我们想要删除的字符,就将该字符保存到一个新的字符串数组里面
j++;//注意每进行一次,j一定要++,因为要向后移动一位
}
p++;//该指向原先的那个字符串的指针向后移动一位,在进行比较,
//比较原先的字符串中的下一个字符与我们待删除的字符是否相同
}
*(str2+j) = '\0';//注意字符串要在末尾加一个串结束符
return str2;//将我们删除的字符后的字符串进行返回
}
}
删除指定字符,用指针的形式实现,c语言,通俗易懂
最新推荐文章于 2024-04-23 12:25:06 发布