C++怎么判断输入string类字符是不是一个数字,然后将string类型转换成int型

 判断方法来源于: 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;
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值