求差错!!!!!
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入:
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格.
输出:
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入:
You want someone to help you
You
I
这是一个考研题,大家帮我看看下面这个代码。
#include<stdio.h>
#include<string.h>
int main()
{
char a[101];
char b[101];
char c[101];
char d[101][101];
int l;
int i,j,k;
while(gets(a))
{
int t=0;
scanf("%s",b);
scanf("%s",c);
l=strlen(a);
i=0;
j=0;
for(j=0;j<101;j++)
{
for(k=0;k<101;i++,k++)
{
if(a[i]==' ') {d[j][k]=='\0';i++;break;}
else if(a[i]=='\0') {d[j][k]=='\0';t=1;break;}
else d[j][k]=a[i];
}
if(t==1) break;
}
for(i=0;i<=j;i++)
{
if(strcmp(b,d[i])==0) strcpy(d[i],c);
}
for(i=0;i<j;i++) printf("%s ",d[i]);
printf("%s\n",d[i]);
scanf("\n");
}
}
为什么只有加了scanf("\n"); 才对呢,求大侠帮忙啊
[解决办法]
偶然!
[解决办法]
你这个程序提交 能AC掉?我运行了下,好像输出不对吧。。
[解决办法]
- C/C++ code
#include <stdio.h>#include <string.h>void strRep(char *, int, char *, int, char *, int);intmain(void){ char *str = "you want some one to help you"; strRep(str, strlen(str), "you", 3, "I", 1); printf("Replaced string is: %s\n", str); return 0;}int strSearch(char *, int, char *, int);/* 在字符串 src 里(src的长度为srcLen), 替换所有的字符串 tgt 为字符串 rep */voidstrRep(char *src, int srcLen, char *tgt, int tgtLen, char *rep, int repLen){ }/* 在字符串 src 里(src的长度为srcLen), 返回第一个找到的目标字符串的位置 */intstrSearch(char *src, int srcLen, char *tgt, int tgtLen){ }
[解决办法]
- C/C++ code
#include<stdio.h>#include<string.h>int main(){ char a[101]; char b[101]; char c[101]; char d[101][101]; int l; int i,j,k; while(gets(a)) { int t=0; scanf("%s",b); scanf("%s",c); getchar(); //吸收回车,如果不吸收gets会读取这个回车 // 或者改成下面这种方式读字符串// gets(b);// gets(c); l=strlen(a); i=0; j=0; k = 0; for(i=0;i<= l;i++) { if (a[i] == ' ') { d[j][k] = '\0'; k = 0; ++j; } else if (a[i] == '\0') { d[j][k] = '\0'; ++j; } else { d[j][k] = a[i]; ++k; } } /* for(k=0;k<101;i++,k++) { if(a[i]==' ') {d[j][k]=='\0';i++;break;} // == 用错了吧. else if(a[i]=='\0') {d[j][k]=='\0';t=1;break;} else d[j][k]=a[i]; } if(t==1) break; */ for(i=0;i<j;i++) { if(strcmp(b,d[i])==0) strcpy(d[i],c); } for(i=0;i<j - 1;i++) printf("%s ",d[i]); printf("%s\n",d[i]); // scanf("\n"); } return 0; }
[解决办法]
scanf("%s",b);
scanf("%s",c);
输入完 b,c字符串后,有一回车在这里,scanf("\n");刚好把回车吸收了,如果不吸收就会被gets()吸收而做为a字符串。
也可能 getchar();吸收,就如我上面的程序;
if(a[i]==' ') {if(a[i]==' ') {d[j][k]=='\0';i++;break;}
else if(a[i]=='\0') {d[j][k]=='\0';t=1;break;}
这几句程序有错,你看到没,d[j][k]=='\0'应该为d[j][k]='\0'吧
[解决办法]
我们输入字符串的时候,scanf()会忽略回车,而gets()却不会忽略。