写一个函数,输入一行字符,将此字符串中最长的单词输出

#include<stdio.h>#include<string.h>voidmain(){voidlongwords(charstr[]);charstr1[80];i... #include<stdio.h>
#include<string.h>
void main()
{
void longwords(char str[]);
char str1[80];
int i;
printf("please input a string:\n");
gets(str1);
i=strlen(str1);
str1[i]=' ';
str1[i+1]='\0';
longwords(str1);
}

void longwords(char str[])
{
int maxlen,len,i,j,src1=0,src2=0;
maxlen=len=0;
for(i=0,j=0;str[i]!='\0';i++,j++)
{
if(str[i]=' ')
{
len=j;
if(len>maxlen)
{
maxlen=len;
src1=src2;
}
j=0;
src2=i+1;
}
}
for(i=src1;str[i]!=' ';i++)
printf("%c",str[i]);

}

//为什么我的这个程序没有输出结果
展开
 我来答
问明6E
高粉答主

2019-06-24 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:13.7万
展开全部

#include <stdio.h>

void main(){

void maxLen(char str[50]);

char str[50];

gets(str);

maxLen(str);

}

void maxLen(char str[50]){

int i,j=1,t=-1,start=0,m;

int maxNum(int num[50]);

int num[50]={0};

num[0]=-1;//num[1]放第一个单词的长度,num[2]放第二个单词的长度,。。。

for(i=0;i<50;i++){

if(str[i]==' ' || str[i]=='\0') {num[j]=i-t-1;t=i;j++;

}

}

//找出num[j]最大时的下标m

m=maxNum(num);

//计算最长字符串的开始位置

for(i=1;i<m;i++){

start += (num[i]+1);

}

//输出最长字符串

for(i=start;i<start+num[m];i++){

printf("%c",str[i]);

}

printf("\n");

}

int maxNum(int num[50]){

int i,j;

int max=num[0];//num[0]=-1

for(i=0; i<50; i++){

if(max<num[i]){max=num[i]; j=i;}

}

return (j);

}

扩展资料:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果要打印的数的位数如果超过我们设定m则原样输出;

如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

百度网友7eff2e0
2012-05-16 · TA获得超过1043个赞
知道小有建树答主
回答量:787
采纳率:80%
帮助的人:555万
展开全部
首先在longwords函数里有个笔误:
if(str[i]=' ')
应该改为
if(str[i]==' ')

其次楼主在main()中把输入的字符串的结尾符给换成空格了,那么怎么判断字符串在哪里结尾?

对于这种问题,一般由两个步骤反复循环直到字符串末尾。
1. 忽略空格,直到找到字符(非空格,单词开始)
2. 继续向下,直到找到空格(单词结束)

尽量保存楼主的原文,改后如下。编译运行正常。
#include<stdio.h>
#include<string.h>
void main()
{
void longwords(char str[]);
char str1[80];
int i;
printf("please input a string:\n");
gets(str1);
i=strlen(str1);
//str1[i]=' ';
//str1[i+1]='\0';
longwords(str1);
}

void longwords(char str[])
{
int maxlen,len,i,j,src1=0,src2=0;
maxlen=len=0;

j=strlen(str);
for(i=0;;i++)
{
while(str[i]==' ') i++;//忽略空格,直到找到单词开始
if(i==j)
break;
for(src2=i;i<j;i++)//单词开始,向下找
{
if(str[i]==' ') //直到空格(单词结束)
{
len=i-src2;
if(len>maxlen)
{
maxlen=len;
src1=src2;
}
break;
}
}
if(i==j)break;
//继续循环找下一个单词
};
for(i=src1;str[i]!=' ';i++)
printf("%c",str[i]);
}
追问
谢谢哈,晚上自己看了下找到了,加个等号就对了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式