这道题做了好久。。。开始是因为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;
}