C 字符串中删除指定字符
题目如图:
题目意思很明显了,我们的思路其实也挺简单的,换句话说,删掉一个然后重构数组,补上那个空,一个个字符推进一格就行了嘛,不用想得太复杂(简单的来说就是偷懒)。
1#include<stdio.h>
2#include<string.h>
3void delchar(char s[], char c);
4int main(void)
5{
6 char c;
7 char s[80];
8 printf("Input a string: ");
9 gets(s);
10 printf("Input a char: ");
11 scanf("%c", &c);
12 delchar(s, c);
13 printf("After deleted,the string is:%s", s);
14 return 0;
15}
16
17void delchar(char s[], char c)
18{
19 int i, j, len;
20 len = strlen(s);
21 for(i = 0; i < len; i++) {
22
23 if(s[i] == c) {
24 for(j = i; j < len; j++)
25 s[j] = s[j + 1];
26
27 i = i - 1;
28 }
29 }
30
31}
32
程序是同学问我了之后我改的,所以不必太在意和我的风格不符=。=
根据评论,我们改进代码(评论里师匠写的)
void delchar(char s[], char c)
{
int len;
char *p, *q;
for (p = q = s; *p; ++p) {
if (*p != c) {
*(q++) = *p;
}
}
*q = '\0';
}
评论 (2)
缩进不能忍。 ``` void delchar(char s[], char c) { int len; char *p, *q; for (p = q = s; *p; ++p) { if (*p != c) { *(q++) = *p; } } *q = '\0'; } ```
喂,你的水平不应该写出小舟水平的代码啊。 ``` void delchar(char s[], char c) { int len; char *p, *q; for (p = q = s; *p; ++p) { if (*p != c) { *(q++) = *p; } } *q = '\0'; } ```