/*<说明>
编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找
</说明>*/
#include<time.h>
#include<iostream>
using namespace std; void shortestWord(char* in)
{
int i,j=;
int o[];
for(i=;*(in+i)!=;i++)
{
if(*(in+i)==' ')
{
o[j]=i; //o的作用是定位每一个空格的位置 通过空格位置间隔的大小判断单词的长短
j++;
}
}
j--;
int z=;
int k=o[]; //k是最短单词的个数 初始化为第一个空格的位置 因为后面的操作没有考虑第一个
int l[];
for(;j!=;j--)
{
if(o[j]-o[j-]-<k)
{
z=;
k=o[j]-o[j-]-;
l[]=j-;
}
else if(o[j]-o[j-]-==k)
{
z++; //z统计有多少个最短单词
l[z]=j-;
}
}
if(o[]==k)
{
for(int n=;n<k;n++)
{
printf("%c",*(in+n)); //如果第一个单词就是最短的 打印
}
printf(" ");
}
for(int m=z;m>;m--)
{ for(int n=;n<=k;n++)
{
printf("%c",*(in+o[l[m]]+n)); //打印其他最短单词
}
printf(" ");
}
}
void main()
{
char in[]="Learning a the parameters of neural networks is perhaps one of the most well studied problems within the field of machine learning. Early work on backpropagation algorithms showed that the gradient of the neural net learning objective could be computed efficiently and used within a gradient descent scheme to learn the weights of a network with multiple layers of non-linear hidden units. Unfortunately, this technique doesn’t seem to generalize well to networks that have very many hidden layers (i.e. deep networks). The common experience is that gradient-descent progresses extremely slowly on deep nets, seeming to halt altogether before making significant progress, resulting in poor performance on the training a set (under-fitting)";
int a=clock();
shortestWord(in);
int b=clock();
int c=b-a;
printf("%d",c);
getchar();
}

上面是自己写的代码 效果并不好 测试了一下运行效果2毫秒 太慢 而且没有考虑有连续空格的情况。

/*<书上答案>*/
#include<iostream>
#include<time.h>
using namespace std;
const int Max=;
char *findshort(char s[])
{
static char s1[Max]; //其地址要返回,所以设计为静态变量
char s2[Max];
int i=,j,len1=,len2=;
while(s[i++]!='\0');
s[i-]=' ';
s[i]='\0';
i=;
while(s[i]!='\0')
{
if(s[i]==' '&&s[i+]!='\0'&&s[i+]==' ') //跳过多余空格
{
i++;
continue;
}
if(s[i]!=' ') //提取一个单词到S2中
{
s2[len2++]=s[i];
}
else if(len1==)
{
len1=;
for(j=;j<len2;j++) //将S2复制到S1中
s1[len1++]=s2[j];
s1[len1]='\0';
len2=;
}
else if(len1>len2)
{
len1=;
for(j=;j<len2;j++) //将S2复制到S1中
s1[len1++]=s2[j];
s1[len1]='\0';
len2=;
}
else
{
len2=;
}
i++;
}
return s1;
}
void main()
{
char s[Max]="asddddd gg las sdlgaw va eg aoeng a ge a e gae geoia ae x eox ge x ieg ns e a dfge qdn i am ver";
cout<<"输入单词串:"; int a=clock();
cout<<"最短单词:"<<findshort(s)<<endl;
int b=clock();
int c=b-a;
cout<<c<<endl;
getchar();
}

这是答案中的 只打印了第一个最短单词 但是实现比自己写的代码快很多。

C++基础练习题(一): 查找最短单词的更多相关文章

  1. [LeetCode] Shortest Word Distance III 最短单词距离之三

    This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...

  2. [leetcode]244. Shortest Word Distance II最短单词距离(允许连环call)

    Design a class which receives a list of words in the constructor, and implements a method that takes ...

  3. noi25 最长最短单词(为什么会出现运行时错误)

    noi25 最长最短单词(为什么会出现运行时错误) 一.总结 一句话总结:比如除以零,数组越界,指针越界,使用已经释放的空间,数组开得太大,超出了栈的范围,造成栈溢出 1.c++报runtime er ...

  4. js基础练习题(1)

    1.字符串 视频教程地址: js基础练习题 1.如何连接两个或者两个以上字符串? var cssname = 'box' var num = 1 var html = '<div class=& ...

  5. Linux基础练习题(二)

    Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...

  6. [LeetCode] Shortest Word Distance II 最短单词距离之二

    This is a follow up of Shortest Word Distance. The only difference is now you are given the list of ...

  7. AC日记——最长最短单词 openjudge 1.7 25

    25:最长最短单词 总时间限制:  1000ms 内存限制:  65536kB 描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母.空格和逗号.单词由至少一个连续的字母构成 ...

  8. [Swift]LeetCode244.最短单词距离 II $ Shortest Word Distance II

    This is a follow up of Shortest Word Distance. The only difference is now you are given the list of ...

  9. [Swift]LeetCode245.最短单词距离 III $ Shortest Word Distance III

    This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...

随机推荐

  1. 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。

    ********************************* 思路壹(也是网络上铺天盖地的通俗解决方案) 原因: 这是因为先安装了 .NET Framework , 随后启用了 .NET Fra ...

  2. ELK常见错误分析(转)

    ELK 常见错误处理   ELK 这里就不介绍了,如何安装请参考博客之前的文章.在这里感谢ttlsa团队,同时,我很荣幸能加入到ttlsa团队中,分享点滴,凉白开说发文章有红包,期待这篇群主能给多少红 ...

  3. MySql的安装及配置详细指引!

    一.安装My Sql数据库 1.1,首先下载MySQL与HeidiSQL工具,双击打开后可以看到名为”mysql-5.0.22-win32 Setup.exe”的安装程序,双击执行该程序. 1.2,打 ...

  4. bootstrap搜索框样式代码及效果

    <div class="container"> <div class="input-group"> <input type=&qu ...

  5. 机器学习之Hash集合问题

    问题来源与七月学习之 (3.x线性代数与矩阵运算基础)

  6. VMware 关闭虚拟机 Ubuntu 12 的 3D 效果,提高性能

    Ubuntu 2012,有 2D 和 3D 的渲染效果,但是 在虚拟机中,开启 3D 效果后,特别卡.好在 VMware 中有个“关闭3D”的开关,如下图所示: 去掉勾选“加速 3D 图形”

  7. java 1.7

    http://superuser.com/questions/740064/how-to-install-java-1-7-runtime-on-macos-10-9-mavericks sudo r ...

  8. ajax 请求多张图片数据

    需求分析: 实现对网页上的图片进行显示.由于读取图片名称相同,而图片内容已发生改变.采用网上所用的要求浏览器不缓存的操作不生效 <META http-equiv="Pragma&quo ...

  9. 【android-tips】如何在view中取得activity对象

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 今天想实现在view中返回上一个activity的功能,想了半天.因为在虽然view是包含于一个activity ...

  10. Linux新手应掌握的10个基本命令

    导读 Linux对我们的生活有着很大的影响.然而在Linux上,你通常应该使用终端命令,而不是只要点击启动器图像(就像你在Windows上操作那样).这10个基本的Linux命令和重要命令会帮助你尽快 ...