-
题目描述:
-
输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。
-
输入:
-
测试数据有多组,每组输入字符串s和字符c。
-
输出:
-
对于每组输入,输出去除c字符后的结果。
-
样例输入:
-
heallo a
-
样例输出:
-
hello
所以需要原地转换,即每次移动字符,都将字符直接移动到它最后应该出现的位置上面
k用来记录特定字符的数量
k初始为0,所以str[i-k] = str[i]没有问题,之后每次检查出一个ch特定字符,k++,之后的str[i-k] = str[i]保证一次就将字符移动到它最后应该放置的位置上面
对 “healleo” 'e'这个字符串和特殊字符举例说明:
1、i= 0,k = 0, ‘h’ealleo->healleo
2、i= 1,k = 0, h‘e’alleo->healleo
3、i = 2,k = 1,he'a'lleo->haalleo
4、i= 3,k = 1, haa'l'leo->hallleo
5、i= 4,k = 1, hall'l'eo->hallleo
6、i = 5,k = 1,halll'e'o->halleeo
7、i= 6,k = 2, hallee'o'->halloeo
8、i = 7,k = 2,结束
str[n-k] = '\0';//str[7-2] == str[i-k] = '\0';
9、halloeo -> hallo
核心代码:
k = 0;
n = strlen(str);
for(i = 0; i< n;i++)
{
str[i-k] = str[i];
if(str[i] == ch)
{
k++;
}
}
str[n-k] = '\0';完整代码:
/**************************************************************
Problem: 1049
User: hrdjmax2
Language: C
Result: Accepted
Time:0 ms
Memory:916 kb
****************************************************************/
#include <stdio.h>
#include <string.h>
char str[1024];
char ch;
int main()
{
int i,k,n;
while(scanf("%s",str)!=EOF)
{
getchar();
scanf("%c",&ch);
k = 0;
n = strlen(str);
for(i = 0; i< n;i++)
{
str[i-k] = str[i];
if(str[i] == ch)
{
k++;
}
}
str[n-k] = '\0';
printf("%s\n",str);
}
}
本文详细解释了如何在不使用额外空间的情况下,从字符串中移除指定字符的过程,通过实例演示了核心算法步骤,包括变量初始化、遍历字符串及字符计数等关键操作,最终展示了一个简洁高效的实现代码。

385

被折叠的 条评论
为什么被折叠?



