删除字符串的一部分

《C和指针》第6章编程练习:
请编写一个函数,删除一个字符串的一部分,函数的原型如下:
int del_substr(char *str,char const *substr )
函数首先应该判断substr是否出现在str中,如果它并未出现,函数就返回0;如果出现,函数应该把str 中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第1次出现的子串,函数的第二个参数绝不被修改。
要求:1不能使用任何操纵字符串的库函数
     	   2  不能使用下标
后面有源码及注释

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int del_substr(char *str,char const *substr);//函数声明

int main()

{

int ret = 0;

char str[20] ;

char substr[20] ;

printf("please input str substr:\n");

scanf("%s%*c",str);

scanf("%s",substr);

printf("str:%s,substr:%s\n",str,substr);

ret = del_substr(str,substr);

printf("the change str:%s\n",str);

printf("%d\n",ret);

return 0;

}

/*

**完成自己的前count个字符比较函数,相同返回0

*/

int my_strncmp(const char *s1,const char *s2,int count)

{

const char *c1 = s1;

const char *c2 = s2;

while(--count&&(*c1 == *c2))

{

c1 ++;

c2 ++;

}

return *c1 - *c2;

}

/*

**完成自己的检测字符串长度函数,返回字符串长度

*/

int my_strlen(const char *str)

{

const char *s1 = str;

for(s1 = str;*s1 != ‘\0‘;s1++)

{

;

}

return s1 - str;

}

/*

**删除字符串函数,成功返回1,str中删除第一个出现的substr;失败返回0,str不变

*/

int del_substr(char *str,char const *substr)

{

int flag = 0;//控制只删除一次的变量

char *ptr = str;

char *src = str;

int len = my_strlen(substr);

while(*src != ‘\0‘)

{

if(flag == 0&&my_strncmp(src,substr,len) == 0)

{

src = src + len;//匹配成功,src的指向后移len

flag = 1;

}

*ptr++ = *src++;//将src指向的字符赋给ptr指向的字符

}

*ptr = ‘\0‘;

str = ptr;//将修改好的字符串赋给str

if(flag == 1)//如果字符串被改动过一次,返回1

{

return 1;

}

return 0;

}

时间: 2024-10-13 22:15:37

删除字符串的一部分的相关文章

删除字符串头部的空白字符

#include <stdio.h> #include <string.h> //删除字符串头部的空白字符. int main() { char code[]=" hello World"; // int len=sizeof(code); char buf[16]; int count=0; int i=0; for(i=0;i<len;i++) { if(code[i]==' ') { continue; } else { for(int j=i;j&

字符串-02. 删除字符串中的子串(20)

输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2. 输入格式: 输入在2行中分别给出不超过80个字符长度的.以回车结束的2个非空字符串,对应S1和S2. 输出格式: 在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串. 输入样例: Tomcat is a male ccatat cat 输出样例: Tom is a male import java.util.Scanner; public class Main { public static

[算法]删除字符串中重复的字符

如何删除字符串中重复的字符 问题描述: 删除字符串中重复的字符,例如,"good"去掉重复的字符串后就变成"god". 第一种方法: "蛮力法",最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为'\0',最后再把这个字符数组中所有的'\0'去掉,此时得到的字符串就是删除重复字符后的目标字符串. 代码如下: package 删除字符串中重复的字符; public class Solu

删除字符串中指定位置的字符

/********************************************************************** * 版权所有 (C)2015, Wu Yingqiang. * * 文件名称:DelPosChar.c * 文件标识:无 * 内容摘要:删除字符串中指定位置的字符 * 其它说明:无 * 当前版本: V1.0 * 作 者: Wu Yingqiang * 完成日期: 20150115 * ***********************************

删除字符串中出现次数最少的字符

题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述: 删除字符串中出现次数最少的字符后的字符串. 输入例子: abcdd 输出例子: dd 思路:(我的思路有点绕弯,先记录下来,后面有网友简洁思路),首先把字符串元素存入list中,继续以key-字符,value-出现次数存入map中,然后map按照val

删除字符串中多余的空格

作者 : 卿笃军 今天遇到的一道笔试题,后来百度 了一下,原来是一道新浪的面试题. 题目大意是这样:给你一个任意字符串,要求你删除字符串中多余的空格. 示例:('_'表示空格) 1)"12__abc_98_"     ==> "12_abc_98" 2)"______65_21__54__3_89___"  ==>  "65_21_54_3_89" 思路:设2个下标i,pos一个用于遍历字符串(i),另外一个用于指

算法分析---删除字符串中出现次数最少的字符

编写一个函数,删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串.字符串中其他字符保持原来的顺序. 格式说明: 字符串仅仅包括字母.不可能为空串,不包括空格,单词仅仅由小写英文字母组成.输入的字符串长度不会超过20个char . 算法思路: (1)定义一个长度为26的整型数组 下标从0-25分别表示a-z这26个小写字母,用来保存字符串中各个字符出现的次数 (由于'a'-'a'=0,'z'-'a'=25刚好与数组的下标相应) "abcdddeeffffx

[两个指针]删除字符串中指定的字符

删除字符串中指定的字符 输入 char *a = "abc123"; char *del = "a13"; 利用两个字符指针的方式,pslow,pfast; char *pslow,*pfast; 两个指针一开始都指向字符串的开始位置; pfast开始遍历字符串, if(*pfast==指定字符){////这里疑惑的地方就是,pslow什么时候向前滑行 将pfast所指字符,移到pslow的位置(就是赋值操作,*pslow = *fast) pslow++; pfa

删除字符串空格 C语言实现

今天上午遇到了个面试模拟题,不是很难,经常能看到这样相同或相似的题,但是突然想不到很好的办法,晚上整理下思路,写了下来 #include<stdio.h> #include<string.h> #include<stdlib.h> //删除字符串首部和尾部的空格,中间的有超过一个的空格的话就换成一个空格 //例子:"  hsf g   dfgg ","hsf g dfgg" //"   ","&quo