2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现
4.
#include<stdio.h>
#include<string.h>
/*以下6行,函数alphabetic,判断是否为字母*/
int alphabetic(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1);
else return(0);
}
/*以下30行,函数longest,计算最长单词的起始位置。*/
int shortest(char string[])
{
int len=1,i,flag,length=strlen(string),place=0,point;
/*flag表示单词是否开始,flag=0表示未开始,flag=1表示单词开始;
len表示单词以累计的字母个数;length表示先前单词中最短单词的长度;
point表示当前单词的起始位置;place表示最长单词的起始位置.*/
for(i=0;i<=strlen(string);i++)
{
if(alphabetic(string[i]))/*判断是否为字母*/
{
if(flag)/*是,开始*/
{
flag=0; point=i;
}
else len++;/*进入计算,+1*/
}
else/*不是,比较已统计*/
{
flag=1;
if(len<=length)
{
length=len;
place=point;
}
len=0;
}
}
return(place);
}
/*以下14行,主函数,调用shortest计算最长单词的起始位置,并输出*/
void main()
{
char line[1024];
int i,n=0;
printf("please input one line:
");
gets(line);
printf("The shortest word is :");
for(i=shortest(line);alphabetic(line[i]);i++)
{
printf("%c",line[i]);
n++;
}
printf("
The length is %d.
",n);
}
C语言 :写一个函数 输入一行字符 将此字符串中最长的单词输出
悬赏分:0 - 离问题结束还有 14 天 23 小时
8-10
#include <iostream>
void main()
{
int word(char c);
int longest(char str[]);
int i;
char str[80];
printf("输入一行字符串
");
gets(str);
printf("
最长的单词为:
");
for(i=longest(str);word(str[i]);i++)
printf("%c",str[i]);
printf("
");
}
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);
}
把两个函数放在同一个程序文件中:
//函数返回最长单词的起始位置
int longest(char string[])
{
//n为字符串的长度,len为每个单词的长度
//length为最长单词的长度,point为最长单词的起始位置
int len,i,length=0,flag=0,place=0,point;
for(i=0;;++i)
{
if(string[i] >= 'a' && string[i] <= 'z' || string[i] >= 'A' && string[i] <= 'Z')
{
if(flag)
{
len=1;
point=i;
flag=0;
}
else
{
++len;
}
}
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
}
len=0;
}
if(string[i] == 0)
break;
}
return place;
}
int main(int argc, char* argv[])
{
longest(" fjfds fjdsg fjsajg fdhasg843 vhjgg gjagjgjfah f f ");
return 0;
}
将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行:
将longest函数剪切后存放在另一个.c文件中,在int main前面加一行声明:
extern int longest(char string[]);
我看在abc()中楼主的思想是:把单词先一个个找出来存到d[50][50]中,然后再比较长短。
错误比较多,就不一一指出了,也难怪,楼主是新手。
我改了一下,贴在下面,请楼主对照自己的看吧。(我这个测试通过)
#include
#include
void abc(char c[],char e[50])
{
int i,j,k,x;
char d[50][50]={0};
for(i=0,j=0;;) //初始化,并开始无限循环,由内部决定何时跳出
{
k=0; //开始查找一个新单词
while(c[i]==' ') i++; //忽略开头的空格
while(c[i]!=' ' && c[i]!='\n') //记录这个单词直到遇到空格或回车
{
d[j][k]=c[i];
k++;
i++;
}
if(c[i]=='\n') break; //如果是回车,则所有单词都找完了,跳出循环
j++; //准备查下一个单词
}
strcpy(e,d[0]);
for(x=1;x<=j;x++)
if(strlen(e)<strlen(d[x])) strcpy(e,d[x]);
}
void main()
{
char a[200],b[50];;
printf("请输入一行字符串:");
for(int i=0;;i++){
a[i]=getchar();if(a[i]=='\n')break;}
abc(a,b);
puts(b);
}
勾询草乌: 把两个函数放在同一个程序文件中://函数返回最长单词的起始位置 int longest(char string[]) {//n为字符串的长度,len为每个单词的长度//length为最长单词的长度,point为最长单词的起始位置int len,i,length=0,flag=0,place=0,point;for(i=0;;++i...
多伦县13447077031: 用一个函数来实现将一行字符串中最长的单词输出 - ?
勾询草乌: 程序longest.cpp #include <cstring> #include <iostream> #include <strstream> using namespace std; #define szSTR 256void longest(const char * line, char * lg) {char s[szSTR]; int ln = 0;istrstream strin(line);while(!strin.eof()) {strin >> s;if (...
多伦县13447077031: 用一个函数来实现将一行字符串中最长的单词输出.此行字符串从主函数传递给该函数. - ?
勾询草乌: 4.#include #include /*以下6行,函数alphabetic,判断是否为字母*/ int alphabetic(char c) { if((c>='a'&&c='A'&&creturn(1); else return(0); } /*以下30行,函数longest,计算最长单词的起始位置.*/ int shortest(char string[]) { int len=1,i,flag,length=...
多伦县13447077031: 用一个函数来实现将一行字符串中最长的单词输出.此行字符串从主函数传递给该函数.晓得的请留言.3q!?
勾询草乌: #include <stdio.h> void fun(char *s) { char *p = s; int i,pos,npos,maxlen = 0,len; while(*p) { npos = p - s; len = 0; while((*p != ',') && (*p != '.') && (*p != ' ') && (*p != '!') && (*p)) { len++; p++; } if(len > maxlen) { maxlen = len; pos = npos; } if(*p) p++; } printf...
多伦县13447077031: 我是C语言初学者,帮我用一个函数来实现将一行字符串中最长的单词输出.此行字符串从主函数传递给该函数. - ?
勾询草乌: C语言 :写一个函数 输入一行字符 将此字符串中最长的单词输出 悬赏分:0 - 离问题结束还有 14 天 23 小时 8-10#include <iostream> void main() { int word(char c); int longest(char str[]); int i; char str[80]; printf("输入一行字符串\n\n"); gets(str...
多伦县13447077031: 用一个函数来实现将一行字符中最长的单词输出.此行字符串从主函数传递给该函数.?
勾询草乌: C语言代码如下 自己做的,并写注释了.很容易懂.不懂到我百度空间留言 #include <stdio.h> #include <string.h> 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]);//从...
多伦县13447077031: 我想问下,如何用一个函数实现将一行字符串中,最长的单词输出,此行字符串从主函数传递给该函数. - ?
勾询草乌: #include char * findlongword(char * str) { char long_word[100]; char temp_word[100]; unsigned int len = 0; memset(temp_word,0,sizeof(temp_word)); memset(long_word,0,sizeof(long_word)); for(int i=0;i { if((str[i] != 0x20) && (str[i] != 0x00)) { temp_...
多伦县13447077031: 写一个函数,输入一行字符,将此字符串中最长的单词输出 - ?
勾询草乌: #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]放第二个单...
多伦县13447077031: 编程实现,从键盘输入一行字符串,请用自定义函数(详情看图吧= =) - ?
勾询草乌: int huiwen(char str[ ]) {char *p = *q = str;//定义两个字符指针指向str while(*p != '\0') {p++; }p--;//p指向字符最后一个while (*q != '\0') {if(*q != *p) return 0; q++; p--;}//判断如果不同那就不是回文,返回0return 1;} 思路就是这样.
多伦县13447077031: 输入一行字符串,调用自定义函数nixu,将字符串逆序输出 - ?
勾询草乌: #include //逆序字符串 void nixu(char *str) { int i,len; char ch; if(str == NULL) return; len=strlen(str); for(i=0;i { ch=str[i]; str[i]=str[len-i-1]; str[len-i-1]=ch; } } int main() { char string[256]; printf("输入一行字符串: "); scanf("%s",string); nixu(string);...