楼主其实你的输入有问题,你怎么不用scanf()函数呢。下面是我写的代码和运行的结果,希望能给你拓展一下思路。注意一下,如果最长的单词有多个,我的代码只能记录第一个最长的。
#include
#include
#include
#include
int main()
{
int i, n, t, max, site;
char word[500][20], s[20];
printf("please enter some words, enter twice ctrl+z finish\n\n");
i=0;
while(scanf("%s", word[i])!=EOF)
{
i++;
}
n=i;
max=0, site=0;//初始化:最大长度为0,最长的单词在地0个
for(i=0; i { t = strlen(word[i]); if(t > max) { max = t; strcpy(s, word[i]); site = i; } } if(n>0) { printf("\nthe longest word is: %s\n", s); printf("its' lenth is %d\n", max); printf("its' site is %d\n", site+1); //site加1是将数组下标改为第几个单词 } else { printf("there is no word\n"); } }
# include
# include
int main() {
char line[100];
int alphabetic(char),i;
int longest(char[]);
printf("input a line:\n");
gets(line);
for(i = longest(line);alphabetic(line[i]);i++)
printf("%c",line[i]);
printf("\n");
return 0;
}
int alphabetic(char x) {
if('a' <= x && x <= 'z' || 'A' <= x && x >= 'Z') return 1;
return 0;
}
int longest(char str[]) {
int i = 0,len = 0,maxlen = 0,index,start;
while(str[i]) {
while(str[i] && !alphabetic(str[i])) ++i; // 过滤掉非英文字符
len = 0;
index = i;
while(str[i] && alphabetic(str[i])) { // 统计单词长度
++len;
++i;
}
if(len > maxlen) {
maxlen = len;
start = index;
}
}
return start;
}
#include
#include
//返回字符c是不是单词的组成部分,包括单引号和字母,数字
//在此可以自己设定哪些字符是单词的组成部分
//如果是单词的组成部分,函数返回1,否则返回0
int ischar(char c){
if (c=='\'') return 1;
if (c>='a' && c<='z') return 1;
if (c>='A' && c<='Z') return 1;
if (c>='0' && c<='9') return 1;
return 0;
}
//在s中查找最长的单词,把单词保存在s1,并返回单词的长度
int maxlongword(char *s,char *s1){
int i=0,i1,j;
*s1=0; //使s1成为空字串
while(s[i]!=0){
while(ischar(s[i])==0 && s[i]!=0) i++; //找下一个单词所在位置i
i1=i;
if(s[i]==0) break;
while(ischar(s[i])==1 && s[i]!=0) i++; //找下一个单词结束位置i
if (strlen(s1)for(j=i1;j s1[j-i1]=0;
}
if(s[i]==0) break;
}
return strlen(s1);
}
int main(){
char p[100]; //用于保存最长的单词
int n; //用于保存最长单词的长度
n=maxlongword("Hello this is my worlds !",p); //调用函数计算最长的单词
printf("最长的单词是%s 长度=%d\n",p,n);
//运行结果 最长的单词是worlds 长度=6
}
在f函数中再添加一个变量 int pos=0;每找到一个新单词,长度又大于已找到的任意一个单词,就加一,那么最后这个pos就是最长单词的位置了,这个位置指的第几个单词,没有定位到具体的偏移量,但是要算出来也很简单了
//帮你改造一下:
#include
#include
void main()
{
char c[50];
void f(char c[50]);//不设返回值了,直接用函数f打印结果。
gets(c);
f(c);
}
void f(char c[50])
{
int len=0,lenth=0,i,flag=0;
for(i=0;c[i]!='\0';i++)
{
if(c[i]!=' ')
len++;
if(c[i]==' ')
{
if(len>lenth)
{
lenth=len;
flag = i - lenth;//当新的最长串出现时,用flag记录该串起始下标
}
len=0;
}
}
if(len>lenth)
{
lenth=len;
flag = i - lenth;//同理
}
printf("最长的子串长度为%d个字符,该子串为:",lenth);//打印子串长度
for(i = flag;i < flag + lenth;i++)//打印子串,下标从flag到flag + lenth - 1
printf("%c",c[i]);
printf("\n");//换行
}