将键盘输入的字符串(该字符串只包含字母和*)删除字符串中的*号

#include <stdio.h>

#include <stdlib.h>

void main()

{

FILE *fp;

    char c;

    char str[100]={'\0'};

    char str1[100]={'\0'};

    int i=0,j=0,k=0;

int p=0,q=0;

char a[100],b[100];

scanf("%s",str);

    fp=fopen("D:\\test.txt","w");

fputs(str,fp);

fclose(fp);

    fp=fopen("D:\\test.txt","r");

    c=fgetc(fp);

    str[i++]=c;

    while(c!=EOF)

{

c=fgetc(fp);

str[i++]=c;

    }

    fclose(fp);

    for(i=0;a[i]!='\0';i++)

{

if(a[i]!='*')

break;

}

p=i;

for(i=strlen(str1)-1;i>=0;i--)

{

if(a[i]!='*')

break;

}

q=i;

if(j<=p||j>=q)

{

str1[k++]=str[j];

}

else if(str[j]!='*')

{

str1[k++]=str[j];

}

puts(str1);

if(!(fp=fopen("D:\\test.txt","w+")))

{

printf("test.txt打开失败\n");

return 0;

}

fwrite(str1,1,k,fp);

fclose(fp);

}输出错误,求正确输出

 

#include <stdio.h>
#include <string.h>
void main()
{
	FILE *fp;
    char c;
    char str[100]={'\0'};
    char str1[100]={'\0'};
    int i=0,j=0,k=0;
	int p=0,q=0;
	char a[100],b[100];
	gets(str);
    fp=fopen("D:\\test.txt","w");
	fputs(str,fp);
	puts(str);
	fclose(fp);
    fp=fopen("D:\\test.txt","r");
    c=fgetc(fp);
    str[i++]=c;
    while(c!=EOF)
	{
		c=fgetc(fp);
		str[i++]=c;
    }
    fclose(fp);
    for(i=0;str[i]!='\0';i++)
	{
		if(str[i]!='*'){
			
			break;
		}			
	}
	p=i-1;
	for(i=strlen(str)-2;i>=0;i--)
	{
		if(str[i]!='*')
			break;
	}
	q=i+1;
	k=0;
	for(i=0;str[i]!='\0';i++){
		if(i<=p||i>=q)
		{
			str1[k++]=str[i];
			printf("%s\t",str1);
		}
		else if(str[i]!='*')
		{
			str1[k++]=str[i];
		}
	}
	puts(str1);
	if(!(fp=fopen("D:\\test.txt","w+")))
	{
		printf("test.txt打开失败\n");
		return 0;
	}
	fwrite(str1,1,k,fp);
	fclose(fp);

}

 

#include <stdio.h>

#include <stdlib.h>

void main()

{
	FILE *fp;
	char str[100] = { '\0' };
	char str1[100] = { '\0' };
	int i = 0, j = 0, k = 0;
	int p = 0, q = 0;
	scanf("%s", str);
	fp = fopen("D:\\test.txt", "w");
	fputs(str, fp);
	fclose(fp);
	fp = fopen("D:\\test.txt", "r");
	fgets(str, 100, fp);
	fclose(fp);
	for (i = 0; str[i] != '\0'; i++)
	{
		if (str[i] != '*')
		{
			str1[j++] = str[i];
		}
	}

	puts(str1);
	fp = fopen("D:\\test.txt", "w+");
	if (!fp)

	{
		printf("test.txt打开失败\n");
		return;
	}

	fwrite(str1, 1, j, fp);

	fclose(fp);
}

 

是所有的*号都删除吗?还是只删除字母之间的*号。全部删除的话,上面两位给出的代码是可用的,如果只删除字母之间的*号(比如,字符串*a**B*cd**,删除字母之间的*号,得新串*aBcd**),那么代码如下:

#include <stdio.h>
#include <string.h>
void main()
{
	FILE* fp;
	char buf[1024] = {0};
	//char* p;
	int size;   //文件大小
	int i; 
	int indexbegin = 0,indexlast = 0;
	printf("请输入一个字符串:");
	gets(buf);
	size = strlen(buf);
	//写入文件
	if(!(fp = fopen("a.txt","w")))
	{
		printf("文件打开失败\n");
		return ;
	}
	fwrite(buf,1,size,fp);
	fclose(fp);
	fp = 0;
	//读文件
	if (!(fp = fopen("a.txt","r")))
	{
		printf("文件打开失败\n");
		return ;
	}
	fseek(fp,0,SEEK_END);
	size = ftell(fp);
	rewind(fp);
	size = fread(buf,1,size,fp);
	fclose(fp);
	fp = 0;
	//写入文件
	if (!(fp = fopen("b.txt","w")))
	{
		printf("文件打开失败\n");
		return ;
	}
	//p = &buf[0];
	i = 0;
	
	//找到第一个和最后一个字母的位置
	for (indexbegin = 0; indexbegin < size; indexbegin++)
	{
		if(buf[indexbegin] != '*')
			break;
	}
	for (indexlast = size -1; indexlast >= 0 ;indexlast--)
	{
		if(buf[indexlast] != '*')
			break;
	}
	//将0-indexbegin之间的写入文件
	fwrite(buf,1,indexbegin,fp);
	//将indexbegin-indexlast之间的写入文件
	while(indexbegin <= indexlast)
	{
		if(buf[indexbegin] != '*')
			fwrite(&buf[indexbegin],1,1,fp);
		indexbegin++;
	}
	//将indexlast之后的写入文件
	if(indexlast < size-1)
		fwrite(&buf[indexlast+1],1,size - indexlast,fp);
	fclose(fp);
	fp = 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632