C++Primer Plus(第六版) 第七章 第六题

来源:互联网 发布:郑也夫被打脸 知乎 编辑:程序博客网 时间:2024/05/16 17:46

之前我写过C++Primer Plus 的第六章第二题,现在阅读到第七章第六题发现之前写的有点问题,就是在 输入的时候输入数字和点的混合体怎么办。

比如 4.34.3 或者 4..4 之类的字符串,这些很明显不是double值,但之前的代码能通过,故在此完善。

代码如下:

#include<iostream>#include<string>#include<cctype>#define MAX_SIZE 10using namespace std;int Fill_array(double ar[], int max);void Show_array(const double ar[], int len);void Reverse_array(double ar[], int len);bool judge_double(const string line);int main(){double ar[MAX_SIZE];int len = Fill_array(ar, MAX_SIZE);Show_array(ar, len);Reverse_array(ar + 1, len - 2);Show_array(ar, len);cin.get();return 0;}bool judge_double(const string line){bool judge = true;// 对字符'.'技术判断for (int i = 1; i < line.size(); i++)// 在调用此函数前已对0位进行判断故从1开始{if (isdigit(line[i]))// 如果是数字直接进入下一循环{continue;}if (judge && '.' == line[i])// 对字符'.'判断,且只是一次才进入下面语句{judge = false;// 将判断置为falsecontinue;}return false;//执行到这一语句肯定不符合以上条件,故不为double}return true;}int Fill_array(double ar[], int max){int len = 0;string line;for (; len < max; len++){cout << "Please input " << (len + 1) << " number: ";getline(cin, line, '\n');if (!isdigit(line[0])){break;}if (!judge_double(line)){break;}ar[len] = atof(line.c_str());}return len;}void Show_array(const double ar[], int len){for (int i = 0; i < len; i++){cout << ar[i] << " ";}cout << endl;}void Reverse_array(double ar[], int len){double temp;for (int i = 0; i < len/2; i++){temp = ar[i];ar[i] = ar[len - 1 - i];ar[len - 1 - i] = temp;}}

0 0
原创粉丝点击