
一道c语言编程题,寻找字符串最长的单词并输出
编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词,输出最长的单词。#include<stdio.h>intmain(){chars[...
编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词, 输出最长的单词。
#include<stdio.h>
int main()
{
char s[50];
char *p1,*p2;
int i=0,b=1,j=0,MAX=0,flag=1;
printf("please input a string:");
gets(s);
for(i=0;s[i]!='/0';i++)
{
j++;
if(b==1) //程序第一次执行
if(s[i]==32)
{
p1=&s[0]; //第一次执行程序,p1默认指向第一个单词
MAX=i;//记录第一个单词的长度
j=0; //j要来计算一个单词的长度
b=0;
}
if(s[i]==32&&flag==1)
{
p2=&s[i+1];//p2记录下一个单词
flag=0;
}
if(s[i]==32)
{
if(j-1>MAX)
{
p1=p2;//让p1指向长的单词
j=0;
flag=1;//标志重置为1,方便p2记录下一个单词
}
}
}
while(*p1!='\0'&&*p1!=32) //输出最长的单词
printf("%c",p1++);
} 展开
#include<stdio.h>
int main()
{
char s[50];
char *p1,*p2;
int i=0,b=1,j=0,MAX=0,flag=1;
printf("please input a string:");
gets(s);
for(i=0;s[i]!='/0';i++)
{
j++;
if(b==1) //程序第一次执行
if(s[i]==32)
{
p1=&s[0]; //第一次执行程序,p1默认指向第一个单词
MAX=i;//记录第一个单词的长度
j=0; //j要来计算一个单词的长度
b=0;
}
if(s[i]==32&&flag==1)
{
p2=&s[i+1];//p2记录下一个单词
flag=0;
}
if(s[i]==32)
{
if(j-1>MAX)
{
p1=p2;//让p1指向长的单词
j=0;
flag=1;//标志重置为1,方便p2记录下一个单词
}
}
}
while(*p1!='\0'&&*p1!=32) //输出最长的单词
printf("%c",p1++);
} 展开
1个回答
展开全部
这一行写错了,p1前要加个*号:
printf("%c",p1++);
要改成
printf("%c", *p1++);
看别人写的程序很难懂,不如自己重写一下,已经测试通过:
#include <stdio.h>
#include <string.h>
int main()
{
char s[128];
char *p1, *p2;
int max=0, len=0;
printf("Input a string: ");
gets(s);
p1=s;
for (int i=0; i<strlen(s); i++)
{
if (s[i]==' ') // 如果当前字符为空格,则比较当前单词长度是否大于最大值,再将长度复位。
{
if (len>max)
{
max=len;
p2=p1;
}
len=0;
} else // 如果当前字符非空,如果当前长度为0,则表示新单词。
{
if (len==0)
p1=&s[i];
++len;
}
}
while (*p2 && *p2!=' ')
printf("%c", *p2++);
}
printf("%c",p1++);
要改成
printf("%c", *p1++);
看别人写的程序很难懂,不如自己重写一下,已经测试通过:
#include <stdio.h>
#include <string.h>
int main()
{
char s[128];
char *p1, *p2;
int max=0, len=0;
printf("Input a string: ");
gets(s);
p1=s;
for (int i=0; i<strlen(s); i++)
{
if (s[i]==' ') // 如果当前字符为空格,则比较当前单词长度是否大于最大值,再将长度复位。
{
if (len>max)
{
max=len;
p2=p1;
}
len=0;
} else // 如果当前字符非空,如果当前长度为0,则表示新单词。
{
if (len==0)
p1=&s[i];
++len;
}
}
while (*p2 && *p2!=' ')
printf("%c", *p2++);
}
追问
额,你的程序我也觉得没问题,但运行的结果有错误,比如我输入the people,结果输出是the,不符合要求啊
追答
抱歉,是没把字符串结束符考虑进去,稍微改一下,请测试:
#include
#include
int main()
{
char s[128];
char *p1, *p2;
int max=0, len=0;
printf("Input a string: ");
gets(s);
p1=s;
for (int i=0; imax)
{
max=len;
p2=p1;
}
len=0;
} else // 如果当前字符非空,如果当前长度为0,则表示新单词。
{
if (len==0)
p1=&s[i];
++len;
}
}
while (*p2 && *p2!=' ')
printf("%c", *p2++);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询