判断方法来源于: https://zhidao.baidu.com/question/362958084.html
#include<iostream>
#include<string> //提供string类,说白了相当于一个动态数组,并且重载了[]运算符,所以可以访问下标
#include <cctype> //调用isdigit函数要用它,isdigit函数是判断一个字符是否是数字,是返回true,否则返回false
using namespace std;
bool IsDigit(string&);
int main() {
string str; //声明类对象
cout << "请输入字符串:" << endl;
cin >> str;
if (IsDigit(str)) {
cout << "输入的是数字" << endl;
}
else {
cout << "输入的不是数字" << endl;
}
return 0;
}
bool IsDigit(string& str) {
bool flag = true;
for (unsigned int i = 0; i < str.length(); i++)//length是string类的一个成员函数返回字符串的长度
{//用for循环访问字符串中的每个字符
if (!isdigit(str[i]))//额,这儿还是用if,这儿用while也没错,有点把while当if用的意思
{//判断字符是否是数字,如果不是isdigit返回false,则!isdigit为true,执行后面的把flag设为false
flag = false;
break;
}
}
return flag;//返回flag,如果字符串为数字则flag为true,否则为false
}
转换方法来源:https://blog.csdn.net/weixin_45676049/article/details/108653320
通过使用.c_str()函数可以将string类型转换为const char * 类型,使用atoi()函数可以将const char*转换为int类型。
#include <stdlib.h>
atof():将字符串转换为双精度浮点型值。
atoi():将字符串转换为整型值。
atol():将字符串转换为长整型值。
以下是C++Primer Plus第五章第七题,还有很多地方有待改进。方法源于:https://blog4jimmy.com/2017/10/80.html
#include<iostream>
#include <string>
#include <cstdio> //isdigit
#include <cctype> //调用isdigit函数要用它,isdigit函数只能判断一个字符是否是数字,是返回true,否则返回false
#include <stdlib.h> //● atof():将字符串转换为双精度浮点型值。● atoi():将字符串转换为整型值。● atol():将字符串转换为长整型值。
using namespace std;
bool IsDigit(string&);
struct Car {
string made;
int madeyear;
};
bool IsDigit(string& Size) {
bool flag = true;
for (unsigned int j = 0; j < Size.length(); j++)//length是string类的一个成员函数返回字符串的长度
{//用for循环访问字符串中的每个字符
while (!isdigit(Size[j])) //这里 if 或 while 都行
{//判断字符是否是数字,如果不是isdigit返回false,则!isdigit为true,执行后面的把flag设为false
flag = false;
break;
}
}
return flag;//返回flag,如果字符串为数字则flag为true,否则为false
}
int main() {
string Size ;
cout << "有多少辆车: ";
/*未完成:不能判断输入的用户名和年代是否是对应类型,如果不是对应类型会出错*/
while (cin >> Size) {
if (IsDigit(Size)) {
cout << "输入的是数字" << endl; // 是数字
//使用.c_str()函数转换成const* char类型数字,再使用atoi()转换成int类型
int size = atoi(Size.c_str());
struct Car* p = new struct Car[size];
for (int i = 0; i < size; i++) {
cout << "Car #" << i + 1 << ":" << endl;
cout << "输入生产商: ";
/*cin.get() 为获取下一行做准备。P79 81 ;
若没有,下面的cin.getline()会获取上面cin输入的换行符号,认为是空行*/
cin.get();
/*对于 cin 的操作 使用 getline(cin,str)往往可以实现更加简单以及安全的字符串操作,
不同于 cin.getline(char*, int a),前者可以直接对字符串进行操作
https://www.runoob.com/cplusplus/cpp-files-streams.html */
getline(cin, p[i].made); //cin>>p[i].made; //获取名字
cout << "输入生产年代: ";
cin >> p[i].madeyear; //获取年代
}
cout << "信息: " << endl;
for (int i = 0; i < size; i++) {
cout << "---生产商: " << p[i].made << " 年代: " << p[i].madeyear << endl;
}
}
else {
cout << "请输入数字: " << endl; //输入的不是数字
}
}
getchar();
return 0;
}