69,369
社区成员
发帖
与我相关
我的任务
分享
for(; j<t; ) {
if(!strncmp(&s[j], " how", 4)) {
j += 4;
这样应该就可以了,你试一试#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;
}
#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;
}
#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;
}
#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;
}
我改写了些代码,楼主可以试试,看看符合要求不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].
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");
}
}
}
}
以上代码纯手写,不保证通过。