求助!!求帮忙~~!!!C语言习题

StephenVW 2013-05-20 10:15:34
题目:编写一个函数,删除一个字符串中的指定字符。
我自己写的代码如下,但就是不知道哪里出错了,求大大们指教~~!!!

#include <stdio.h>
#include <string.h>
int main()
{
char c;
char string[50];
void strdelc(char string[],char c);
printf("请输入字符串:");
scanf("%s",&string);
printf("请输入要删除的字符:");
scanf("%c",&c);
strdelc(string,c);
}
void strdelc(char string[],char c)
{
char term[]={0};
int num,i;
num=strlen(string);
for(i=0;i<=num;i++)
{
if(string[i]!=c)
term[i]=string[i];
}
printf("改动后的字符串为:%s",term);
}
...全文
138 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
折翼断JJ 2013-05-21
  • 打赏
  • 举报
回复
在你的基础上改了下,主函数和调用函数都有一些小错误的。以后注意点就行了。
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
int main()
{
int i=0;
char c,ch;
char string[50];
void strdelc(char string[],char c);
printf("请输入字符串:");
while((ch=getchar())!='\n')
{
   string[i]=ch;
   i++; 
}
printf("请输入要删除的字符:");
scanf("%c",&c);
strdelc(string,c);
return 0;
}
void strdelc(char string[], char c)
{
    int num, i, j;
    num = strlen(string);
    for(i=0, j=0; i<num; i++){    
        if(string[i] != c){
            string[j++] = string[i];
        }
    }
    string[j] = '\0';
    printf("%s",string);
    return;
}
StephenVW 2013-05-21
  • 打赏
  • 举报
回复
谢谢各位大大的指教~~!!!问题终于得以解决了~~!!
hugett 2013-05-21
  • 打赏
  • 举报
回复
你的程序问题很多。。改成以下这样。。

#include <stdio.h>
#include <string.h>
int main()
{
	char c;
	char string[50];
	void strdelc(char string[],char c);
	printf("请输入字符串:");
	scanf("%s",&string);
	printf("请输入要删除的字符:");
	while(getchar() != '\n');//
	scanf("%c",&c);
	strdelc(string,c);
}
void strdelc(char string[],char c)
{
	//char term[]={0}; //这样数组会越界。。
	int num, i, j;
	num=strlen(string);
	char *term = new char[num + 1];
	for(i = j = 0; i < num; i++)
	{	
		if(string[i]!=c)
			term[j++]=string[i];
	}
	term[j] = '\0';
	printf("改动后的字符串为:%s\n",term);
	delete [] term;
}
max_min_ 2013-05-20
  • 打赏
  • 举报
回复
void DeleteChar(char *src, char c)
{
	int i;
	for(i=0; i< strlen(src); i++)
	{
		if(src[i] == c )
		{
			if(src[i+1])
				memcpy(src+i, src+ (i+1), strlen(src) -i);
			else
				src[i] = '\0';
		}
	}
winassembly 2013-05-20
  • 打赏
  • 举报
回复
上面的第2点纠正一下: 当i=num时,循环判断式仍然成立,循环体依旧执行,此时string[i]的值为'\0'。而后i++,此时若再使用string[i],将会产生数组下标越界。所以在循环中一般不这样设置循环判断式,以免不小心造成错误,给调试带来困难。
xxpyb 2013-05-20
  • 打赏
  • 举报
回复
void DeleteChar(char* str, char toDel)
{
	int len = strlen(str);
	int vPos = 0;
	int sPos = 0;
	while( sPos<len)
	{
		while(*(str+sPos) == toDel)
		{
			sPos++;
		}
		if(vPos<sPos)
		{
			*(str+vPos)=*(str+sPos);
		}

		vPos++;
		sPos++;
	}

	*(str+vPos)='\0';
}
winassembly 2013-05-20
  • 打赏
  • 举报
回复
1、在你的程序中,scanf("%s",&string)有错,string是数组名,本身是一个指向字符数组第一个元素的指针,所以其输入语句应为scanf("%s",string)。 2、你的strdelc函数中for(i=0;i<=num;i++)中的循环判断式i<=num错误,照你这样设置的话,当i=num时,程序将访问数组末端的下一个位置,而这个位置中的内容是未知的,自然程序的运行结果也是未知的。 3、char term[]={0},以这种给定一个初始值的方式定义未指定长度的字符数组,结果就是该字符数组的长度为1,系统为其分配两个字节的存储空间(一个字符加一个‘\0’),当(string[i]!=c)时,执行term[i]=string[i]也会造成数组下标越界; 4、if(string[i]!=c) term[i]=string[i]; 你的目的是将string中不匹配c的字符存储在term中,但如果string[i]==c呢(i代表的位置在string的中间),则strig[i]之后的字符该如何处理?这些在你的strdelc函数中并未考虑到,自然你的程序是不能完成任务的。 楼主可以参考1楼给出的解决方案。
anshiny 2013-05-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

void strdelc(char string[],char c);

int main(){
	char c, string[50];
	printf("请输入字符串:");
	gets(string);
	printf("请输入要删除的字符:");
	scanf("%c",&c);
	strdelc(string, c);
	printf("删除后:");
	printf("%s\n",string);
	return 0;	
}

void strdelc(char string[], char c){
	int num, i, j;
	num = strlen(string);
	for(i=0, j=0; i<num; i++){	
		if(string[i] != c){
			string[j++] = string[i];
		}
	}
	string[j] = '\0';
	return;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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