首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求差错!该如何处理

2012-06-16 
求差错!!!!!输入一个字符串,以回车结束(字符串长度100)。该字符串由若干个单词组成,单词之间用一个空格隔

求差错!!!!!
输入一个字符串,以回车结束(字符串长度<=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()却不会忽略。

热点排行