这两天做作业有感

     国庆节7天假,很容易就过去了,这两天在补作业,说实话,老师布置的作业都很基础的,选择填空题都是一些概念性很强的常识题。而程序设计题呢,也都是类似于谭浩强老师编的教材上的题目了。真的很基础,但是我发现那些程序设计题,自己做的还是没有进入状态,没有手感,很多程序似曾相识,编过、做过、老师讲过。但是就是公布了手,就是奇怪了,又不是没有接触过的算法题。自己仔细想想是自己练得太少了,没有足够的代码量!

  自己就试着写了很多程序,其中就有一道题是这样的:

    1. 写一个函数,找出给定字符串中大写字母字符(即'A'~'Z'这26个字母)的个数。

应该是很基础的题目吧,我也信心十足的写了起来:

    程序编译能够通过的,但是就是执行输入数据后发生内存错误,一直找不到原因:

程序代码如下:

 

#include<iostream>
#include<ctype.h>//求一个字符串中大写字母的总和
#include<string>
using namespace std;
int main()
{
	
	char s[10];

	int k=0;
	cout<<"please enter string:";
	for(int i=0;i<10;i++)
	cin>>s[i];
	char *p=s;
	for(;p!=NULL;p++)  //问题就出在这里
	{
/*	switch(*p)
	{
		case 'A'
	
	}*/
	if (isupper(*p)) k++;
	}
	cout<<"大写字母的总和为:"<<k<<endl;



return 0;
}


运行后就出现内存错误:

 

 

 

   自己找了很久都没有找到错误之所在,就像qq群求助了,有几个回答了的,但是回答了相当与没有回答:

其中这位c++老兄的回答让我若有所思,也许我问的问题真的是台初级了,但是他说初级,可是有不给我指出错误,真是…………估计他是不屑于吧!

认识到自己水平真的入门级别的吧,是啊练得太少了,就是上课听老师讲讲,就罢了…………

但是终究是要解决问题了,同时有想到老师和我们讲“你们不要一个劲头的钻什么高级程序,高级算法,重要的是在本科阶段打好基础,一些大公司面试也是考查基础的”,一次听卢东昕教授讲座,他也是说他们公司面试很多时候题目就是谭浩强老师编的教材后面联系题的难度,甚至有时是一样的……

我发现基础是很重要的,估计容易掌握也容易忘记吧,所以要经常练习巩固才能掌握牢固。

  自己再认真检查了一下程序,问题就是出在for语句指针控制循环终止的那个语句,应该是*p!=NULL;而不是p!=NULL;因为p是地址,由于p之前就已经初始化为一个非零号地址,所以不可能在为零号地址了,应该是当*P里面的内容为“''\0”时,所以真的是内容,而不是地址。这样这个程序才正常运行了。

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值