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

2024-12-14 07:23:57
推荐回答(5个)
回答1:

#include<stdio.h>

#include<string.h>

void longword(char s[],char t[]);//定义最长单词函数

int main()

{

char str[30],lg[20];

gets(str);//输入一行字符

longword(str,lg);//调用最长单词函数

puts(lg);//输出最长单词

return 0;

}

//最长单词函数

void longword(char s[],char t[])

{

int i,j,n,k,m,word;

char p[20];

n=strlen(s);

m=0;

word=0;

for(i=0,j=0,k=0;i<=n;i++){

if((s>='a'&&s<='z')

||(s>='A'&&s<='Z')){

word=1;

p[j++]=s;

}

else if(word==1){

if(j>k){

for(m=0;m<j;m++)

t[m]=p[m];

t[m]='\0';

k=j;

}

word=0;

j=0;

}

}

}

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include<文件名>

2、#include"文件名"

如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:

#include<math.h>//一些数学函数的原型,以及相关的类型和宏

如果需要包含针对程序所开发的源文件,则应该使用第二种格式。

采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。

回答2:

printf("输入一行字符串\n\n");gets(str);printf("\n\n最长的单词为:\n\n");
for(i=longest(str);word(str[i]);i++)
printf("%c",str[i]);
printf("\n");}int word(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1;
else return 0;}int longest(char str[])【这个函数几乎完全看不懂 望逐句详细解释其逻辑】{int i,flag=1,len=0,point,max_len=0,max_point;
for(i=0;i<=strlen(str);i++)//解析每个字符{if(word(str[i])) //是英文字母的话{if(flag==1) //成立的话说明这个英文字母是单词的第一个{point=i; //单词第一个找到后改变标志flag=0;}else len++; //开始对这个单词长度进行累加}else //非英文字母的话{flag=1; //等待第一个英文字母的出现,所以flag=1(要是下一个是英文字母的话就能执行上面的if)
if(len>max_len)//之前累加的单词长度是否比上一个单词更长(第一次的话max_len初始化为0,len必大于max_len){max_len=len;//将单词长度保存下来
max_point=point;//将最长单词的第一个英文字母在字符串中的位置保存下来}len=0;}}return (max_point);}

回答3:

#include //头文件
#include //字符串头文件
main() //主函数
{
char a[1024],b[20],d[20]={'a'}; //定义字符串
int i=0,s=0,l; //定义整形变量
gets(a); //输入字符串,将其赋给a数组
for(;i<=strlen(a);i++) //循环
{
for(;s<=20;s++,i++) //循环将a赋给b
{
if(a[i]==32) //将单词分出,也就是以空格为间隔符
{
b[s]='\0'; //将空格替换成数组的结束符
s=0; //初始化s
break; //跳出循环
}
b[s]=a[i]; //将a[i]赋给b[s]
}
if(strlen(b)>=strlen(d)) //判断b,d两个数组的长度谁大谁小
for(l=0;l<=strlen(b);l++) //循环
d[l]=b[l]; //将b[l]赋给d[l]
}
puts(d); //输出d数组
}

回答4:

C语言代码如下
自己做的,并写注释了.很容易懂.不懂到我百度空间留言
#include
#include
void main()
{
char str[5][50], max[50];
int i,j;
printf("输入5个字符串:\n");
fflush(stdin);//清空缓存
for(i=0;i<5;i++)
{
gets(str[i]);//从键盘输入,也可以用scanf("%s",&str[i])的方法输入
}
/*
下面是关键,适应strlen()字符串的长度和字符串的比较strcmp(),还有字符串的赋值strcpy()
我会使用字符串的冒泡排序让输入的字符串从大到小排列,那么数组的第一个字符串就是最长的.
*/
for(i=1;i<=5;i++)//需要比较字符串的个数
{
for(j=0;j<5-i;j++)//需要比较的伦数,因为没比较一次就会减少一个字符串,所以用5-i(i自动增长1的变量)
{
if(strcmp(str[j],str[j+1])<0)//strcmp()比较字符串的字符的ASCII的值,第一个"大"返回整数正1(>0),等于返回0(=0),小于返回-1(<0)
{
strcpy(max,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],max);
}
}
}

printf("最长的字符串为:%s,他的长度为:%d",str[0],strlen(str[0]));

}

回答5:

#include
#include
void max(char s[]){
int sum=0,m=0,n=0,i;
for(i=0;i<=strlen(s);i++) {
if(s[i]!=' ')
sum++;
else
{
if(m m=sum;
n=i-1;
} sum=0;
}
}
for(i=n-m+1;i<=n;i++) {
printf("%c",s[i]);
}
}
int main(){
char str[100];
printf("请输入一行字符:\n");
gets(str);
printf("\n此字符串中最长的单词是:\n");
max(str);
printf("\n"); return 0;
}
//max()函数if(s[i]!=" ")改为if(s[i]!=‘ ’)
//max()函数返回值改为void