【九度OJ】1168【字符串删除】【C实现】

这道题做了好久。。。开始是因为C的读入字符串不太会,所以各种查资料,还是有很多细节弄不清楚,开始用getchar()可是死活就是WA,不知道哪里错了。因为这道题的输入有要求,一个字符串是有空格的,所以用gets()可以!!它是以回车结束一次读取。读到文件末尾返回Null。无论是Java,还是C输入输出流的学习和研究都很重要,很多细节要注意。之前还试过getline()不过弄不太懂。

Java更绝,一个replace函数搞定,都封装好了,还是写C锻炼人啊!

还有就是C中没有bool类型,用0表示假,用1表示真。。就这个问题,提交了n次,都是compile error。。。。。。

代码:

/*
by qr 2014-9-4 jobdu 1168  字符串的查找删除
练习C的字符串处理
916KB(内存)	1237B(代码长度)	0MS
*/

#include <stdio.h>
#include <ctype.h>  //int tolower(int c) 字符转换成小写字母
#include <string.h>  //C中可以用

int bijiao(char str1[],char str2[],int index,int len1);  //C中没有bool类型  0表示假  1表示真

int main(){
	int a;
	char str1[100];
	scanf("%s",str1);   //s-->char[]

	getchar();//消化一个回车符

	int len1=strlen(str1);

	char str2[100];
	int len2=0;


	while((gets(str2))!=NULL){  
			//output
		    len2=strlen(str2);
			int i=0;
			for(;i<len2-len1+1;i++){
				if(bijiao(str1,str2,i,len1)){
					i=i+len1-1;
				}else if(str2[i]!=' '){
					printf("%c",str2[i]);
				}
			}
			for(;i<len2;i++){  //剩下的还要再打印出来
				if(str2[i]!=' ')
					printf("%c",str2[i]);
			}
			//reset
			printf("\n");     //c-->char

	}
	return 0;
}


int bijiao(char str1[],char str2[],int index,int len1){
	for(int i=0;i<len1;i++){
		if(tolower(str2[index+i])!=tolower(str1[i])){
			return 0;
		}
	}
	return 1;
}

错误代码,如果大家发现哪里错了可以告诉我!

#include <stdio.h>
#include <ctype.h>  //int tolower(int c) 字符转换成小写字母
#include <string.h>  //C中可以用

int bijiao(char str1[],char str2[],int index,int len1);  //C中没有bool类型  0表示假  1表示真

int main(){
	int a;
	char str1[100];
	scanf("%s",str1);   //s-->char[]

	getchar();//消化一个回车符

	int len1=strlen(str1);

	char str2[100];
	int len2=0;
	while((a=getchar())!=EOF){
		if(a=='\n'){
			//output
			int i=0;
			for(;i<len2-len1+1;i++){
				if(bijiao(str1,str2,i,len1)){
					i=i+len1-1;
				}else if(str2[i]!=' '){
					printf("%c",str2[i]);
				}
			}
			for(;i<len2;i++){  //剩下的还要再打印出来
				if(str2[i]!=' ')
					printf("%c",str2[i]);
			}
			//reset
			printf("%c",a);     //c-->char
			len2=0;
		}else{
			str2[len2++]=a;
		}
	}
	return 0;
}


int bijiao(char str1[],char str2[],int index,int len1){
	for(int i=0;i<len1;i++){
		if(tolower(str2[index+i])!=tolower(str1[i])){
			return 0;
		}
	}
	return 1;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值