黑马程序员技术交流社区
标题: 帮我把代码简化下!!!! [打印本页]
作者: SunJiaqi 时间: 2014-11-22 22:27
标题: 帮我把代码简化下!!!!
在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
int main(int argc, const char * argv[]) {
// 函数声明
void getMaxDirLen(char *,int *,int *,unsigned long );
// 字典串
char Dictorys[100]={"interface implementation protected foundation description Range"};
unsigned long len = strlen(Dictorys);
int nums[20]; // 再次最后一个字母的位置集
int lens[20]; // 单词长度集
getMaxDirLen(Dictorys, nums, lens,len);
return 0;
}
//按字母长度由大到小排序
void getMaxDirLen(char *Dictorys,int *nums,int *lens,unsigned long len)
{
int *ls = lens; // 指向位置集的指针
char *dic = Dictorys; // 指向单词集的指针
int *n = nums; // 指向最后一个字母位置集的指针
int a = 0; // 长度集的大小
for (int i =0; i<len-1; i++) {
if(*(dic+i) == ' ')
{
*(n+a) = i ;
if(a==0)
*(ls+a) = i - *(n+a-1) ;
else
*(ls+a) = i - *(n+a-1) -1;
a++;
}
}
*(n+a) = len ; // 最后一个单词最后一个字母的位置
*(ls+a) = len - *(n+a-1) -1; // 最后一个单词的长度
// 所有单词的长度
// for(int i= 0;i<=a;i++)
// {
// printf("最后一个单词的最后一个字母的位置 %d\t",nums);
// printf("最后一个字母的长度 %d\n" ,lens);
// }
int tnums;
int tlens;
// 位置集和长度集的长度为a+1;
for(int i=1;i<a+1;i++)
{
for(int j=a;j>=i;j--)
{
if(*(lens+j)> *(lens+j-1))
{
tnums = *(nums+j-1);
*(nums+j-1) = *(nums+j);
*(nums+j) = tnums;
tlens = *(lens+j-1);
*(lens+j-1) = *(lens+j);
*(lens+j) = tlens;
}
}
}
printf("在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。\n");
printf("字符串为:\t %s \n",Dictorys);
printf("最长单词为:\t");
for (int i = nums[0]-lens[0]; i<=nums[0]; i++) {
printf("%c",Dictorys);
}
printf("\t长度为: %d",lens[0]);
printf("\n");
}
作者: SunJiaqi 时间: 2014-11-22 22:31
顶顶顶顶顶顶顶顶
作者: 邵起 时间: 2014-11-22 22:40
- #include "stdio.h"
- int main()
- {
- char str[] = "I am a good boy" ; // 已知字符串。
- char *position; // 定义一个指向最长单词首字母的指针。
- int i = 0;
- int count = 0; // 该变量存储每个单词的长度。
- int max = 0; // 存储最长单词的长度。
- int j = 0;
- while(str[i]) // 判断该字符串是否结束。
- {
- count = 0; // 计算每个单词长度前清零。
- while(str[i] != 32&& str[i] != 0) // 判断单词或字符串是否结束。
- {
-
- count++;
- i++;
- }
-
- if( max < count) // 将最长单词字符数存入max。
- {
- max = count;
- position =& str[i-max];// 存储最长单词首字母的存储位置。
-
- }
- i++;
- }
- for(j = 0; j < max; j++) // 输出最长的单词。
- {
- printf("%c",*position);
- *position++;
- }
- return 0;
-
- }
复制代码
作者: qiuguo 时间: 2014-11-22 23:03
顶一下!!!
作者: songxing10000 时间: 2014-11-23 19:39
已经头晕……
作者: 吴海松 时间: 2014-12-25 20:38
太长了啊,看到那么多代码就头大了
作者: weiwei20 时间: 2014-12-25 20:51
#include <stdio.h>
int main()
{
//1,定义整型变量i,长度len,最大长度mlen,定义指针变量p来保存最长单词的首地址,定义指针变
// 量pt,定义字符型数组s[1024]来保存读入的字符串,subs[100]来保存最长单词
int i,len = 0,mlen = 0;
char *p,*pt,s[1024],subs[100];
//2,打印提示输入字符串
printf("输入字符串: ");
//3,读取输入字符串并存入数组s[1024]
gets(s);
//4,for循环遍历字符串每一个字符,判断是否到结尾处
for(pt = s;*pt != '\0';pt++)
{
//5,判断是否遇到字符串中的空格,没有遇到空格,累加len
if(*pt != ' ' ) len++;
//6,如果遇到空格,判断这次的长度是否比上次的长度长
else
{
if(len > mlen)
//7,如果是,保存最大长度mlen,移动最长单词首指针,清零长度计数
{
mlen = len;
p = pt - len;
len = 0;
}
}
}
//8,for循环将最长单词的每一个字符保存到数组subs[i]中
for(i = 0;i < mlen;i++) subs[i] = *(p + i);
//9,保存结束符
subs[mlen] = '\0';
//打印最长单词字符串和字符长度
printf("最长的单词是:%s,其长度是:%d个字符。\n",subs,mlen);
return 0;
}
作者: Drmshow 时间: 2014-12-25 22:16
这个 运行的时候不能找出最长单词的啊
作者: weiwei20 时间: 2014-12-26 00:25
你先编译一下看看有没有错误,我用记事本直接编写的。后来用VC6.0运行之后也没有问题的!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |