c语言删除字符问题

微微的盖� 2019-11-15 03:37:20
就是要写一个删除字符串开头相同的字符的程序,我用devc++写出来了但是运行结果不正确,开头相同的并没有被删除,求大佬看看我错在哪里了。 #include<stdio.h> void deletechar(char s[],char ch){ int i,k; for(i=0;s[i]!=ch;i++){ k++; } for(i=0;s[i]=='\0';i++){ s[i]=s[k]; } } int main(){ char s[1024]; char ch; //input gets(s); ch=getchar(); //process deletechar(s, ch); //output puts(s); return 0; }
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2019-11-15
  • 打赏
  • 举报
回复
引用 9 楼 YSY�的回复:
[quote=引用 6 楼 寻开心的回复:]好奇怪的,干嘛还要二次输入一个字符呢。
那个字符串里面第一个字符直接拿来用不就好了吗
#include<stdio.h>
void deletechar(char s[],char ch) {
int i,k;
for(i=0; s[i]==ch; i++) {
k++;
};
for(i=0; s[k]!='\0'; i++,k++) {
s[i]=s[k];
}
s[i]='\0';
}

int main() {
char s[1024];
char ch;

//input
gets(s);
ch=getchar();

//process
deletechar(s, ch);

//output
puts(s);
return 0;
}
我的想法是找出第一次出现不同字符的下标,然后将后面的字符串输入到一个新的字符串中。然后输出这个新字符串就行了。[/quote] 那你也可以直接在输入时就进行处理,输入第一个字符之后,开启检查(搞个变量),如果下一个输入的与第一个相同,则不放入数组,直到输入一个不同的,把那个变量的值改了,再把输入的存入数组第一位(看你的例子应该是第一位),如果第二个输入的与第一个不同,则应该是存到第二位
「已注销」 2019-11-15
  • 打赏
  • 举报
回复
引用 9 楼 YSY�的回复:
[quote=引用 6 楼 寻开心的回复:]好奇怪的,干嘛还要二次输入一个字符呢。
那个字符串里面第一个字符直接拿来用不就好了吗
#include<stdio.h>
void deletechar(char s[],char ch) {
int i,k;
for(i=0; s[i]==ch; i++) {
k++;
};
for(i=0; s[k]!='\0'; i++,k++) {
s[i]=s[k];
}
s[i]='\0';
}

int main() {
char s[1024];
char ch;

//input
gets(s);
ch=getchar();

//process
deletechar(s, ch);

//output
puts(s);
return 0;
}
我的想法是找出第一次出现不同字符的下标,然后将后面的字符串输入到一个新的字符串中。然后输出这个新字符串就行了。[/quote] 那你也可以直接在输入时就进行处理,输入第一个字符之后,开启检查(搞个变量),如果下一个输入的与第一个相同,则不放入数组,直到输入一个不同的,把那个变量的值改了,再把输入的存入数组第一位(看你的例子应该是第一位),如果第二个输入的与第一个不同,则应该是存到第二位
微微的盖� 2019-11-15
  • 打赏
  • 举报
回复
引用 6 楼 寻开心的回复:
好奇怪的,干嘛还要二次输入一个字符呢。
那个字符串里面第一个字符直接拿来用不就好了吗
#include<stdio.h>
void deletechar(char s[],char ch) {
int i,k;
for(i=0; s[i]==ch; i++) {
k++;
};
for(i=0; s[k]!='\0'; i++,k++) {
s[i]=s[k];
}
s[i]='\0';
}

int main() {
char s[1024];
char ch;

//input
gets(s);
ch=getchar();

//process
deletechar(s, ch);

//output
puts(s);
return 0;
}
我的想法是找出第一次出现不同字符的下标,然后将后面的字符串输入到一个新的字符串中。然后输出这个新字符串就行了。
微微的盖� 2019-11-15
  • 打赏
  • 举报
回复
引用 4 楼 SuperDay的回复:
那开头要是不相同呢?你这个是输入指定字符,让它删除前面的几个字符吧
我的想法是找出第一次出现不同字符的下标,然后将后面的字符串输入到一个新的字符串中。然后输出这个新字符串就行了。
微微的盖� 2019-11-15
  • 打赏
  • 举报
回复
引用 4 楼 SuperDay的回复:
那开头要是不相同呢?你这个是输入指定字符,让它删除前面的几个字符吧
就是题目给的是确定字符#,然后四个#之后就是一个小写字母c,老师讲的是特定化的,但我想写一个普遍化的,就是随便来一个字符串都行的那种。
寻开心 2019-11-15
  • 打赏
  • 举报
回复
好奇怪的,干嘛还要二次输入一个字符呢。
那个字符串里面第一个字符直接拿来用不就好了吗
#include<stdio.h>
void deletechar(char s[],char ch) {
int i,k;
for(i=0; s[i]==ch; i++) {
k++;
};
for(i=0; s[k]!='\0'; i++,k++) {
s[i]=s[k];
}
s[i]='\0';
}

int main() {
char s[1024];
char ch;

//input
gets(s);
ch=getchar();

//process
deletechar(s, ch);

//output
puts(s);
return 0;
}
铖邑 2019-11-15
  • 打赏
  • 举报
回复
并且,第一个循环,是要s[i]==ch吧? 然后应该是一个循环里面s[i]=s[i+k];
铖邑 2019-11-15
  • 打赏
  • 举报
回复
那开头要是不相同呢?你这个是输入指定字符,让它删除前面的几个字符吧
微微的盖� 2019-11-15
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay的回复:
什么叫做开头相同的字符?是要求你删除指定字符在第一个出现的那个位置吗?你这个i和k各代表什么?
比如输入:####ctgu12 hiksh#i## # 然后输出:ctgu12 hiksh#i##
微微的盖� 2019-11-15
  • 打赏
  • 举报
回复
比如输入:####ctgu12 hiksh#i## # 然后输出:ctgu12 hiksh#i##
铖邑 2019-11-15
  • 打赏
  • 举报
回复
什么叫做开头相同的字符?是要求你删除指定字符在第一个出现的那个位置吗?你这个i和k各代表什么?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧