删除指定字符串(C语言)
一、题目描述
本题要求实现一个删除字符串中的指定字符的简单函数。 函数接口定义: void delchar( char *str, char c ); 其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
二、裁判测试程序样例
#include <stdio.h> #define MAXN 20 void delchar( char *str, char c ); void ReadString( char s[] ); /* 由裁判实现,略去不表 */ int main() { char str[MAXN], c; scanf("%c ", &c); ReadString(str); delchar(str, c); printf("%s ", str); return 0; } /* 你的代码将被嵌在这里 */
三、输入输出
输入样例
a happy new year
输出样例
hppy new yer
四、解题思路
也许多人在看到这个题的时候,会在想这样一种思路:”查询整个字符串,当匹配到和目标字符相同的时候,将后面的所有字符往前移动,并删除掉其字符,之后继续往下查询,重复以上的操作,,,“,也许你觉得这样的做法很直接,或者木有问题,但是计算机在运行时,就出现问题了,不说太多,希望有缘人能自己去实现一下,看看这种思路到底有何弊端?实践才能出真理。
今天我们来看看另外一种思路:当我们在玩老鹰捉小鸡的时候,小鸡排在母鸡后面,但是有一只或者多只小鸡被老鹰抓住了,必须从队伍中脱离开来,那么后面部分小鸡如何找到前面没有被抓走的呢?是不是需要找到最后一个没有被抓走的?当去连接前面没有被抓走的小鸡的时候,后面部分的第一个小鸡又被抓走了?那么下一个又是如何去连接前面呢? 同样的道理,定位当前没有和目标字符相匹配的字符位置,当后面字符出现与目标字符不相匹配的字符时,只将其移动到前一个字符后面即可,后面未查询的字符不跟着往前移动。如此直到最后整个字符串匹配完。
五、示例代码
void delchar( char *str, char c ){ int curr_index = 0; for(int i=0;str[i]!= ;++i){ if(str[i]!=c){ str[curr_index++] = str[i]; } } str[curr_index]= ; }
六、运行结果
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
Java SE基础知识总结一