c++:写一函数,输入一行字符,将此字符串中最长的单词输出。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++:写一函数,输入一行字符,将此字符串中最长的单词输出。相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <string.h>
char seek(char a[])
int n,k,j=0,i=0,l=0;
char b[100];
n=strlen(a);
for(k=0;k<=n;k++)
if(a[k]==' ')
if((k-j)>(i-l))
i=k;
l=j;
j=k+1;
for(k=l;k<=i;k++)
b[k]=a[k];
return(b[]);
int main()
char c[100];
gets(c);
printf("%s",seek(c));
getchar();getchar();
return(0);
#include <stdio.h>
#include <string.h>
char seek(char a[])
int n,k,j=0,i=0,l=0;
char b[100];
n=strlen(a);
for(k=0;k<=n;k++)
if(a[k]==' ')
if((k-j)>(i-l))
i=k;
l=j;
j=k+1;
for(k=l;k<=i;k++)
b[k]=a[k];
return(b[]);
int main()
char c[100];
gets(c);
printf("%s",seek(c));
getchar();getchar();
return(0);
#include <stdio.h>
#include <string.h>
char seek(char a[])
int n,k,j=0,i=0,l=0;
char b[100];
n=strlen(a);
for(k=0;k<=n;k++)
if(a[k]==' ')
if((k-j)>(i-l))
i=k;
l=j;
j=k+1;
for(k=l;k<=i;k++)
b[k]=a[k];
return(b[]); 编译后这行有错...
int main()
char c[100];
gets(c);
printf("%s",seek(c));
getchar();getchar();
return(0);
报错:18: error: expected primary-expression before ']' token
新手求指导..
度娘抽了..程序复制了三遍..
#include <stdio.h>
#include <string.h>
char b[100];
char* seek(char a[])
int n,k,j=0,i=0,l=0;
n=strlen(a);
for(k=0;k<=n;k++)
if(a[k]==' ')
if((k-j)>(i-l))
i=k;
l=j;
j=k+1;
for(k=l;k<=i;k++)
b[k]=a[k];
return(b); // 编译后这行有错...
int main()
char c[100];
gets(c);
printf("%s",seek(c));
getchar();getchar();
return(0);
本回答被提问者采纳 参考技术B 在楼上的基础上改了一下,没睡好,花了点时间写,哎,功底远远不够啊。。。
#include <iostream>
#include <cstring>
using namespace std;
void seek(char a[]);
int main()
char c[100];
gets(c);
seek(c);
return(0);
void seek(char a[])
int n=0,k,j,max=0,i=0;
n=strlen(a);
for(k=0;k<=n;k++)
if(a[k]==' '||a[k]==0)
if((k-i)>=max)
j=i;
max=k-i;
i=k+1;
else
i=k+1;
for(int d=j;d<j+max;d++)
cout<<a[d];
参考技术C 改为return b; 试一下
写一个函数,输入一行字符,将此字符串中最长的单词输出
#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]);
//为什么我的这个程序没有输出结果
#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-->m域宽,打印出来以后,在控制台上,显示m位;
如果要打印的数的位数如果超过我们设定m则原样输出;
如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
参考技术A 首先在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]);
追问
谢谢哈,晚上自己看了下找到了,加个等号就对了
本回答被提问者采纳以上是关于c++:写一函数,输入一行字符,将此字符串中最长的单词输出。的主要内容,如果未能解决你的问题,请参考以下文章