/*<说明>
编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找
</说明>*/
#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. 63.Hbase 常用命令

    1.进入 Hbase shell ./hbase shell 2. 命令 1.list 2.truncate 3.scan 4.describe 5.create 'tablename','famil ...

  2. 【C语言入门教程】2.2 常量 与 变量

    2.2 常量 与 变量 顾名思义,常量是运算中不能改变数值的数据类型,变量是可改变数值的数据类型.根据需要,可将一些在程序中不必改变数值的类型定义为常量,这样也可避免因修改数值造成程序错误.任何改变常 ...

  3. 【C语言入门教程】7.4 共用体

    7.4 共用体 共用体又称为联合体,是由不同的数据类型组成的一个整体.与结构体不同的是,共用体每次只能使用其中一个成员.结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长 ...

  4. C#爬虫之~苏飞万能框架使用教程

    苏飞的框架帮助类,很多人应该都知道,不知道可以百度,此处直接说用法. //引入命名空间 using CsharpHttpHelper; //创建Httphelper对象 HttpHelper http ...

  5. mysql 设置可以外部访问

    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;   --授权可以外部 ...

  6. 利用LruCache为GridView异步加载大量网络图片完整示例

    MainActivity如下: package cc.testlrucache; import android.os.Bundle; import android.widget.GridView; i ...

  7. cocos2dx中CC_CALLBACK_1等宏中this指针实际指向

    首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()- ...

  8. Unity路径规划

    Unity路径规划  转自:http://www.cnblogs.com/zsb517/p/4090629.html 背景 酷跑游戏中涉及到弯道.不规则道路. 找来一些酷跑游戏的案例来看,很多都是只有 ...

  9. aspcms 留言 搜索

    留言: <form method='POST' name='myform' onSubmit='return metmessagesubmit("姓名不能为空"," ...

  10. vb.net dll创建

    创建vb.net的动态链接库 如果你想用用VC来编写vb.net的dll,我想本文不适合. 本文只说vb.net的dll. 何为vb.net的dll?实际上就是一个类库. 很多个类封装成一个库了,这就 ...