国庆节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”时,所以真的是内容,而不是地址。这样这个程序才正常运行了。