找不出哪个测试用例会出错

C语言 码拜 9年前 (2016-04-05) 876次浏览
感觉本人写的还挺对,就是通过不了
题目描述:
输入一个字符串,以回车结束(字符串长度<=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
样例输出:
I want someone to help you
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 101
void changmax(char*p,int i,char *q,int k,int n){                  //前移几位替换
int j=0;
while(q[j]!=”\0″)
p[i++]=q[j++];
while(p[i+k-1]!=”\0″){
p[i]=p[i+k];
i++;
}
p[i]=”\0″;
}
void changmin(char*p,int i,char*q,int k,int n){                  //后退几位替换
int m;
p[n+k+1]=”\0″;
while(n>i+strlen(q)-k){
p[n+k]=p[n];
n–;
}
m=0;
while(q[m]!=”\0″)
p[i++]=q[m++];
p[i]=” “;
}
int main(){
char str[MAX],ch;
char str0[MAX],str1[MAX];
int lenth0,lenth1,i,m,j;
while((ch=getchar())!=EOF){
i=0;
while(ch!=”\n”){
str[i]=ch;
ch=getchar();
i++;}
str[i]=”\0″;
scanf(“%s”,str0);
scanf(“%s”,str1);
lenth0=strlen(str0);
lenth1=strlen(str1);
i=0;
while(str[i]!=”\0″){
j=i;
for(m=0;str0[m]!=”\0″;m++,j++)
if(str0[m]!=str[j]){
break;}
if(str0[m]==”\0″&&str[j]==” “||str[j]==”\0”){
if(lenth0>lenth1){
changmax(str,i,str1,lenth0-lenth1,strlen(str));
i=i+lenth1+1;
}
else{
changmin(str,i,str1,lenth1-lenth0,strlen(str));
i=i+lenth1+1;
}
}
else
i++;
}
printf(“%s\n”,str);
}
return 0;
}
解决方案

20

有一个经典的程序,就是c程序设计语言中的单词计数程序,可以利用它修改一下来实现。
题主给出了s,a,b,可以再给一个目标串t(注意t应该比较大,理论上s可以有50个单词,,但是b最大长度可以为100,替换的话需要长度大约为100*50+50)
不太优化的算法如下:对查找的每一个单词(例如放入w中),比较w和a,假如不等,则在t中输出a,等则输出b,同时再输出单词分隔(假如是最一个则输出结尾那个符号)
这个算法不优化的地方是w和a比较,实际上可以在查找单词的过程中同时进行
题主的移动建议就不要搞了
附单词计数程序(高手作品,请认真研读)

  #include <stdio.h>
   #define IN   1  /* inside a word */
   #define OUT  0  /* outside a word */
Click to buy NOW!
PDF-XCHANGE
www.docu-track.com
Click to buy NOW!
PDF-XCHANGE
www.docu-track.com   /* count lines, words, and characters in input */
   main()
   {
       int c, nl, nw, nc, state;
       state = OUT;
       nl = nw = nc = 0;
       while ((c = getchar()) != EOF) {
           ++nc;
           if (c == "\n")
               ++nl;
           if (c == " " || c == "\n" || c = "\t")
               state = OUT;
           else if (state == OUT) {
               state = IN;
               ++nw;
           }
       }
       printf("%d %d %d\n", nl, nw, nc);
   }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明找不出哪个测试用例会出错
喜欢 (0)
[1034331897@qq.com]
分享 (0)