C语言 统计歌词中的单词个数,并找出最短和最长的单词(必须用指针)求帮忙,感谢!!!

作者&投稿:凭都 (若有异议请与网页底部的电邮联系)
统计任意一个字符串中,英文单词的总数,最长的单词长度,最短的单词长度,单词的平均长度~

首先,你的例子string中最长的是dfg,长度是3,不是4,平均也是2.2
然后是代码
final String regex = "[^a-zA-Z]+";
String s = "ab+12cd*123dfg%&()as23BG";
String[] words = s.split(regex);
int min = Integer.MAX_VALUE, max = 0, total = 0, length;
for (String word : words) {
length = word.length();
total += length;
min = Math.min(min, length);
max = Math.max(max, length);
}
System.out.printf("Shortest length: %d
", min);
System.out.printf("Longest length: %d
", max);
System.out.printf("Average length: %f
", ((double) total) / words.length);

你这个字符串有要求吗,是必须都是英文?
是这样的 123ad123adasdvfZ233
还是都是字母加空格 asdf dfsdf dfdsopp ??

函数int gecifun( char *geci, char *strmax, char *strmin)——实现求geci中的单词个数并返回,strmax和strmin中分别存放最长和最短单词;
主函数——调用函数gecifun并输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 500
int gecifun(char *geci, char *strmax, char *strmin)
{
char temp[30];//存储每个单词数组
int num=0,i,word=0;//单词数量和每个单词数组下标
for(i=0;(geci[i])!='\0';i++)
{
if(geci[i]==' '||geci[i]==',' || geci[i]=='.' || geci[i]=='?') //单词分隔符
{

if (word != 0){
temp[word]='\0';
if (num==1){//获取第一个单词的时候,将第一个单词复制给最大和最小
strcpy(strmax,temp);
strcpy(strmin,temp);
}
else//第二个单词之后比较字符串长度之后进行复制
{

if (strlen(temp)>=strlen(strmax))
strcpy(strmax,temp);
if (strlen(temp)<=strlen(strmin))
strcpy(strmin,temp);
}
num++;//单词数量递增
word = 0;//单词数组下标置零
}
}
else
temp[word++] = geci[i];//每个单词按位置赋值
}
return num;
}
int main()
{
int acount;
char lstr[30],sstr[30];
char song[N] = "Daddy finger, Daddy finger, where are you? Here I am. Here I am."
"How do you do? Mammy finger, Mammy finger, where are you? Here I am. Here "
"I am. How do you do? Brother finger, Brother finger, where are you? Here "
"I am. Here I am. How do you do? Sister finger, Sister finger, where are you?"
"Here I am. Here I am. How do you do? Baby finger, Baby finger, where are you?"
"Here I am. Here I am. How do you do?";
acount=gecifun(song,lstr,sstr);
printf("歌词中共有%d个单词。歌词中最长的单词为%s,最短的单词为%s。\n",acount,lstr,sstr);
return 0;
}