C语言 单词转换

cfengyy 2012-11-25 04:25:50
题目描述
输入一个整数K,表示有K组测试数据,接下来的K行,每行输入一个字符串,将其中的单词“how”换成“why”如果没有“how”,就输出“not found!"
输入
先输入一个数一个数,表示要测试的组数,然后依依输入要测试的字符串
输出
输出修改后的字符串,若不包含要修改的“how”,则输出“not found!””
样例输入
3
how are you!
i feel good!
how do you do
样例输出
why are you!
not found!
why do you do
下面是我写的代码,可是提交有错误,求高手给我解决,谢谢了。
#include<stdio.h>
#include<string.h>
int main()
{
long int k,i,j,flag,t;
char s[1000];
scanf("%ld",&k);//输入数据表示测试用列
getchar();
for(i=0;i<k;i++)
{
flag=1;//标记
gets(s);//接受字符串
t=strlen(s);
if(t==3)//如果该字符串长度为3需要判断是否为how
{
if(s[0]=='h' && s[1]=='o' && s[2]=='w')
{
s[0]='w';
s[1]='h';
s[2]='y';
flag=0;//标记存在how
}
if(flag==0)
printf("%s\n",s);
else
printf("not found!\n");
}
else
{
if(s[0]=='h' && s[1]=='o' && s[2]=='w' && s[3]==' ')//在字符串长度不等于3的情况下,判断第一个单词是否为how
{
s[0]='w';
s[1]='h';
s[2]='y';
flag=0;
}
for(j=1;j<t-1;j++)//从第二个字符开始判断如果how单词的前后是空格,就将其转换成why直到倒数第二个字符
{
if(s[j-1]==' ' && s[j]=='h' && s[j+1]=='o' && s[j+2]=='w' && s[j+3]==' ')
{
s[j]='w';
s[j+1]='h';
s[j+2]='y';
flag=0;
}
}
if(s[t-4]==' ' && s[t-3]=='h' && s[t-2]=='o' && s[t-1]=='w')//判断最后四个字符是否为空格和how如果是将其转换成why
{
s[t-3]='w';
s[t-2]='h';
s[t-1]='y';
flag=0;
}
if(flag==0)
printf("%s\n",s);
else
printf("not found!\n");
}
}
return 0;
}
...全文
334 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
breakfisher 2012-11-27
  • 打赏
  • 举报
回复
引用 15 楼 cfengyy 的回复:
引用 4 楼 breakfisher 的回复:C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>#include<string.h>int main(){ long int k,i,j,flag,t; char……
恩,是有点问题,修改了一下:
for(; j<t; ) {
        if(!strncmp(&s[j], " how", 4)) {
          j += 4;
这样应该就可以了,你试一试
cfengyy 2012-11-27
  • 打赏
  • 举报
回复
引用 10 楼 breakfisher 的回复:
引用 8 楼 cfengyy 的回复:引用 4 楼 breakfisher 的回复:C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>#include<string.h>int main(){ long int ……

但是我测试,如果输入,hhow就不能通过了。
cfengyy 2012-11-27
  • 打赏
  • 举报
回复
引用 4 楼 breakfisher 的回复:
C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>#include<string.h>int main(){ long int k,i,j,flag,t; char s[1000]; scanf("%ld",……

我输入的测试用列,开始不对啊。
cfengyy 2012-11-27
  • 打赏
  • 举报
回复
引用 12 楼 xuchao1229 的回复:
#include <stdio.h> #include <string.h> #define MAX 20 int main(void) { int i,j,k,m; int flag=0; char a[MAX][MAX]; printf("请输入要进行测试的字符串的组数:\n"); while(scanf("%……
你的代码有问题,不符合题意。
14号选手 2012-11-27
  • 打赏
  • 举报
回复
引用 14 楼 cfengyy 的回复:
引用 12 楼 xuchao1229 的回复:#include <stdio.h> #include <string.h> #define MAX 20 int main(void) { int i,j,k,m; int flag=0; char a[MAX][MAX]; printf("请输入要进行测试的字符串的组数:\n……
结贴啊
14号选手 2012-11-27
  • 打赏
  • 举报
回复
引用 14 楼 cfengyy 的回复:
引用 12 楼 xuchao1229 的回复:#include <stdio.h>
#include <string.h>
#define MAX 20
int main(void)
{
int i,j,k,m;
int flag=0;
char a[MAX][MAX];
printf("请输入要进行测试的字符串的组数:\n……

我晕了,你肯定是没有以空格键结尾
那你究竟要把内层循环的最大值修改一下啊
这样就行了
#include <stdio.h>
#include <string.h>
#define MAX 20
int main(void)
{
int i,j,k,m;
int flag=0;
char a[MAX][MAX];
printf("请输入要进行测试的字符串的组数:\n");
while(scanf("%d",&k)==1)
{
getchar();
printf("请输入要进行测试的字符串:\n");
for(i=0;i<k;i++)
gets(a[i]);
printf("结果如下所示:\n");
for(i=0;i<k;i++)
{
printf("第%d行字符串:\n",i+1);
m=strlen(a[i]);
for(j=0;j<=m-3;j++)
{
if(a[i][j]=='h'&&a[i][j+1]=='o'&&a[i][j+2]=='w')
{
a[i][j]='w';
a[i][j+1]='h';
a[i][j+2]='y';
flag=1;
}
}
if(flag)
{
puts(a[i]);
flag=0;
}
else
printf("not found!\n");
}
printf("需要继续测试,请重新输入需要测试的组数(输入q退出):\n");
}
return 0;
}



14号选手 2012-11-27
  • 打赏
  • 举报
回复
引用 14 楼 cfengyy 的回复:
引用 12 楼 xuchao1229 的回复:#include <stdio.h> #include <string.h> #define MAX 20 int main(void) { int i,j,k,m; int flag=0; char a[MAX][MAX]; printf("请输入要进行测试的字符串的组数:\n……
什么问题啊? 测试运行图都发出来了 单独的how也修改,要是以空格结尾也修改 符合你的提议啊 你调试过代码了?
14号选手 2012-11-26
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#define MAX 20
int main(void)
{
int i,j,k,m;
int flag=0;
char a[MAX][MAX];
printf("请输入要进行测试的字符串的组数:\n");
while(scanf("%d",&k)==1)
{
getchar();
printf("请输入要进行测试的字符串:\n");
for(i=0;i<k;i++)
gets(a[i]);
printf("结果如下所示:\n");
for(i=0;i<k;i++)
{
printf("第%d行字符串:\n",i+1);
m=strlen(a[i]);
for(j=0;j<m-3;j++)
{
if(a[i][j]=='h'&&a[i][j+1]=='o'&&a[i][j+2]=='w'&&a[i][j+3]==' ')
{
a[i][j]='w';
a[i][j+1]='h';
a[i][j+2]='y';
a[i][j+3]=' ';
flag=1;
}
}
if(flag)
puts(a[i]);
else
printf("not found!\n");
flag=0;
}
printf("需要继续测试,请重新输入需要测试的组数(输入q退出):\n");
}
return 0;
}


14号选手 2012-11-26
  • 打赏
  • 举报
回复
引用 7 楼 cfengyy 的回复:
引用 5 楼 xuchao1229 的回复:仅供参考 C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h>#include <string.h>#define MAX 20int main(void){ int i,j……
你的意思是是以空格结尾是吧? 那还简单些啊,直接改一下就行了
breakfisher 2012-11-26
  • 打赏
  • 举报
回复
引用 8 楼 cfengyy 的回复:
引用 4 楼 breakfisher 的回复:C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>#include<string.h>int main(){ long int k,i,j,flag,t; char……
没问题的,可以通过的
cfengyy 2012-11-26
  • 打赏
  • 举报
回复
引用 2 楼 breakfisher 的回复:
C/C++ code?123456789else{if(s[0]=='h' && s[1]=='o' && s[2]=='w' && s[3]==' ')//在字符串长度不等于3的情况下,判断第一个单词是否为how{s[0]='w';s[1]='h';s[2]='y';flag=0;} 如果t<3呢? 楼主没有考虑t<……
可以的啊,如果t!=3就在else里面执行,测试可以通过的。
cfengyy 2012-11-26
  • 打赏
  • 举报
回复
引用 4 楼 breakfisher 的回复:
C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>#include<string.h>int main(){ long int k,i,j,flag,t; char s[1000]; scanf("%ld",……
输入是howre howe这样的结果是没有how,你的测试可以通过吗?
cfengyy 2012-11-26
  • 打赏
  • 举报
回复
引用 5 楼 xuchao1229 的回复:
仅供参考 C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h>#include <string.h>#define MAX 20int main(void){ int i,j,k,m; int flag=0; ……
如果输入是howerieo shouehouwehow 这个里面没有how,你的测试结果对吗?
areyouaboy 2012-11-26
  • 打赏
  • 举报
回复
没人回答的话大家赶紧跟贴拿分吧,福利来了~
14号选手 2012-11-25
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
#define MAX 20
int main(void)
{
int i,j,k,m;
int flag=0;
char a[MAX][MAX];
printf("请输入要进行测试的字符串的组数:\n");
while(scanf("%d",&k)==1)
{
getchar();
printf("请输入要进行测试的字符串:\n");
for(i=0;i<k;i++)
gets(a[i]);
printf("结果如下所示:\n");
for(i=0;i<k;i++)
{
printf("第%d行字符串:\n",i+1);
m=strlen(a[i]);
for(j=0;j<=m-3;j++)
{
if(a[i][j]=='h'&&a[i][j+1]=='o'&&a[i][j+2]=='w')
{
a[i][j]='w';
a[i][j+1]='h';
a[i][j+2]='y';
flag=1;
}
}
if(flag)
puts(a[i]);
else
printf("not found!\n");
flag=0;
}
printf("需要继续测试,请重新输入需要测试的组数(输入q退出):\n");
}
return 0;
}


运行结果图
breakfisher 2012-11-25
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
int main()
{
  long int k,i,j,flag,t;
  char s[1000];
  scanf("%ld",&k);//输入数据表示测试用列
  getchar();
  for(i=0;i<k;i++)
  {
    flag=1;//标记
    gets(s);//接受字符串
    t=strlen(s);
    if(t>=3) {
      j = 0;
      if(!strncmp(s, "how", 3)) {
        if(s[3] == '\0' || s[3] == ' ') {
          strncpy(s,"why", 3);
          flag = 0;
          j = 3;
        }
      }
      for(; j<t; ) {
        if(!strncmp(&s[j], "how", 3)) {
          j += 3;
          if(j > t)
            break;
          else if(s[j] == '\0' || s[j] == ' ') {
            strncpy(&s[j-3],"why", 3);
            flag = 0;
          }
        }
        else 
          j += 1;
      }
    }
    if(flag==0)
      printf("%s\n",s);
    else
      printf("not found!\n");
  }
  return 0;
}
我改写了些代码,楼主可以试试,看看符合要求不
newtee 2012-11-25
  • 打赏
  • 举报
回复
breakfisher 2012-11-25
  • 打赏
  • 举报
回复
else
{
if(s[0]=='h' && s[1]=='o' && s[2]=='w' && s[3]==' ')//在字符串长度不等于3的情况下,判断第一个单词是否为how
{
s[0]='w';
s[1]='h';
s[2]='y';
flag=0;
}
如果t<3呢? 楼主没有考虑t<3的情况,然后直接去访问s[3].
ylgm44 2012-11-25
  • 打赏
  • 举报
回复

int main()
{
    long int k,i,j,flag,t;
    char s[1000];
    scanf("%ld",&k);//输入数据表示测试用列
    getchar();
    for(i=0;i<k;i++)
    {
        flag=1;//标记
        gets(s);//接受字符串
        t=strlen(s);
        if (t < 3)
        {
            printf("not found!\n");
        }
        else
        {
            bool found = false;
            for (int i = 0; i <= t - 3; i++)
            {
                // how 后面为空格或者字符串结束符,判断含有how
                if (s[i] == 'h' && s[i+1] == '0' && s[i+2] == 'w' && (s[i+3] == ' ' || s[i+3] == '\0')
                {
                      // 替换
                      s[i] = 'w';
                      s[i+1] = 'h';
                      s[i+2] = 'y';
                      found = true;
                      break;// 如果只替换一个how,用break,如果有多个how,都要替换,不要break。
                }
            }
            if (found)
            {
                 printf("%s\n", s);
            }
            else
            {
                 printf("not found!\n");
            }
        }
    }
}
以上代码纯手写,不保证通过。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧