noi25 最长最短单词(为什么会出现运行时错误)
noi25 最长最短单词(为什么会出现运行时错误)
一、总结
一句话总结:比如除以零,数组越界,指针越界,使用已经释放的空间,数组开得太大,超出了栈的范围,造成栈溢出
数组越界,指针越界,使用已经释放的空间,数组开得太大,超出了栈的范围,造成栈溢出1、c++报runtime error是什么意思?
runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。
2、为什么会出现运行时错误?
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];一般来说,在
3、算法题如何查错(比如这里的运行错误)?
把代码按样例运行自己推演一遍,就知道错在哪了 ,比如这里的运行错误,
拿特殊案例推演(这里用的空字符串案例就发现最后代码有问题),容易发现错误,就是推演
二、noi25 最长最短单词(为什么会出现运行时错误)
1、题目描述
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
- 输入
- 一行句子。
- 输出
- 两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。 - 样例输入
-
I am studying Programming language C in Peking University
- 样例输出
-
Programming
I - 提示
- 如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
- 来源
- 习题(12-2)
2、代码
代码一:
#include<iostream>
#include<cstring>
char a[];// 数组要足够大
using namespace std;
int main()
{
gets(a);
int minn = , maxn = , c, d, e, q = , b = ;
int l = strlen(a);
a[l] = ' ';//不加这一句会出现runtime error
for(int i = ; i <= l; ++i)
{
if(a[i] != ' ' && a[i] != ',')
{
++ b;
}
else if(b > ) //为单词结束符号
{
if(b > maxn)
{
maxn = b;
c = i - b;//记录单词的头位置
}
if(b < minn)
{
minn = b;
d = i - b;
}
b = ;//单词长度清0,开始计算下一个单词
} }
//输出最长单词和最短单词
for(int i = c; i <= c + maxn - ; ++i)
cout << a[i];
cout << endl;
for(int i = d; i <= d + minn - ; ++i)
cout << a[i];
return ;
}
代码一种不加第十句,会出现运行时错误。
10 a[l] = ' ';//不加这一句会出现runtime error
再不加第十句,并且第11句换成小于l,也报运行时错误,原因可能是 字符串没有被访问完全而再次访问,也就是说字符串没有访问到'\0'。
11 for(int i = 0; i <= l; ++i)
代码二:
#include<iostream>
#include<cstring>
char a[];// 数组要足够大
using namespace std;
int main()
{
gets(a);
int minn = , maxn = , c, d, e, q = , b = ;
int l = strlen(a);
//a[l] = ' ';//
for(int i = ; i <=l; ++i)
{
if(a[i]=='\0'){
if(b > ){
if(b > maxn)
{
maxn = b;
c = i - b;//记录单词的头位置
}
if(b < minn)
{
minn = b;
d = i - b;
}
b = ;//单词长度清0,开始计算下一个单词
} }
if(a[i] != ' ' && a[i] != ',')
{
++ b;
}
else if(b > ) //为单词结束符号
{
if(b > maxn)
{
maxn = b;
c = i - b;//记录单词的头位置
}
if(b < minn)
{
minn = b;
d = i - b;
}
b = ;//单词长度清0,开始计算下一个单词
} }
//输出最长单词和最短单词
for(int i = c; i <= c + maxn - ; ++i)
cout << a[i];
cout << endl;
for(int i = d; i <= d + minn - ; ++i)
cout << a[i];
return ;
}
三、为什么会出现运行时错误
runtime error可能的原因
runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。
比如说:
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];一般来说,在
oj上做题都把数组设成全局变量,减少5出现的可能。
有的时候再出现这样的错误还会给提示
Runtime Error(ARRAY_BOUNDS_EXCEEDED) // array bounds exceed 数组越界
Runtime Error(DIVIDE_BY_ZERO) //divisor is nil 除零
Runtime Error(ACCESS_VIOLATION) //illegal memory access 非法内存读取
Runtime Error(STACK_OVERFLOW) //stack overflow 系统栈过载
这样可以照着上面查找错误。
解答:
出现runtime error的原因是 数组越界访问,原因是因为没有非下面的c赋初值,
8 int minn = 110, maxn = 0, c, d, e, q = 0, b = 0;
多组数据下,一定会造成数组的越界访问的
50 for(int i = c; i <= c + maxn - 1; ++i)
51 cout << a[i];
52 cout << endl;
noi25 最长最短单词(为什么会出现运行时错误)的更多相关文章
- AC日记——最长最短单词 openjudge 1.7 25
25:最长最短单词 总时间限制: 1000ms 内存限制: 65536kB 描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母.空格和逗号.单词由至少一个连续的字母构成 ...
- [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 ...
- [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 ...
- C++基础练习题(一): 查找最短单词
/*<说明> 编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词的查找 </说明>*/ #include<time.h> #inclu ...
- OpenJudge就算概论-最长单词2【寻找句子内部最长的单词】
/*===================================== 最长单词2 总时间限制: 1000ms 内存限制: 65536kB 描述 一个以'.'结尾的简单英文句子,单词之间用空格 ...
- [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 ...
- [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 ...
- [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 ...
- 输出字符串中最长的单词 C# 算法
要求: 设计一个算法从一片英语文章或者英语字符串里面输出其中最长的单词. Input: string Output: string 尽可能多的设计测试用例来测试这个算法. 考虑空间和时间复杂度 ...
随机推荐
- 【RHEL7/CentOS7基本配置】
目录 @ 相比于6.x的版本,Rhel7/CentOS7增加或改进了以下7大特性. 1.身份管理 kerberos的跨平台信任机制:kerberos将完全兼容微软活动目录,实现完全使用活动目录进行认证 ...
- vue踩坑-Error: listen EADDRNOTAVAIL 192.168.1.122:8081
每天上班,重启电脑,按照下面的步骤,打开vue的项目,开始编写代码,但是,今天一如往常一般操作:1:cd /项目名称 下面就是运行项目了,cd /项目名称,我的文件放在D盘,所以先进入d盘,再进入项目 ...
- Maven学习总结(19)——深入理解Maven相关配置
MAVEN2的配置文件有两个settings.xml和pom.xml settings.xml:保存的是本地所有项目所共享的全局配置信息,默认在maven安装目录的conf目录下,如果没有安装mave ...
- c#+windows api SetWindowsHookEx 全局钩子 demo 下载
效果图 源代码下载地址: http://download.csdn.net/detail/dhfekl/7522141
- 測试password强度
<html> <!--激情在最后面.请看最后面红色字 这是是个计算password强度的实例 网上有非常多这种样例 只是呢,都不怎么好 这是我写的一个完整的效果,能够通用, new一 ...
- python自学群里遇到的小题汇总
题目一: 请使在3秒内计算出一组的数据,偶数在奇数前(注意不使用for while等循环的方法)格式如下1,2,3,4,5,6,7,8,9,10输出结果是2,1,4,3,6,5,8,7,10,9 解决 ...
- mysql允许外部连接设置
错误信息: SQL Error (1130): Host ‘192.168.1.88’ is not allowed to connect to this MySQL server 说明所连接的用户帐 ...
- webclient类学习
(HttpWebRequest模拟请求登录):当一些硬件设备接口 或需要调用其他地方的接口时,模拟请求登录获取接口的数据就很有必要. webclient类:只想从特定的URI请求文件,则使用WebCl ...
- IO流学习笔记
1.File类 文件和目录路径名的抽象表示形式. 4种构造方法 File(File parent, String child) File(File parent, String child) File ...
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
转自:http://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html 比较的是四种复制的方式,分别为Apache的BeanUtils和Prope ...