C++从控制台输入

多行输入回车监测截至

有那么一种情况,输入的数据可以是以一行一行的形式读入,这一行中可能包括了空白字符,比如说,某一个带有空格的句子。每输入一句,就将这一行的数据进行处理做出相应的输出,然后继续等待下一行结束。最后,当监测到输入的是回车符号的时候,就结束循环。

	while (true)
	{
		string s;
		getline(cin, s);
		if (s.size() == 0)
		{
			break;
		}
		cout << s<< endl;

从指定字符串中提取出数字,并利用

比如今天要求从“m=3,n=2”中提取出数字来进行运算,我用的方法是,检测第一个等于号的位置和第一个逗号的位置,算出逗号和等号之间的字符串,然后截取第2个等号的位置,直接输出-(第二个等号的位置);
这里有一个小方法

vector<string> devideBychar(string s,char c)
{
	//分割类似于这样的函数:  “this isdas buuhthsg sdah sdas csd”;或者this,sdhahs,sdasd,sdas,sad
	//采用字符串自己提供的内置函数
	vector<string> vc;
	int start = 0;//查找字符串的起始位置
	int loca = 0;//找到的位置
	while (loca != -1)
	{
		loca = s.find(c, start);
		string sub = s.substr(start, loca - start);
		//cout << sub<<" ";//输出检测
		vc.push_back(sub);
		start = loca + 1;
	}

	return vc;
}

采用C++string分割的方法能够简单的处理这种工作,
当然string.sub(star,length)函数有一种这样的用法:

string s ="12345678";
string sub = s.substr(5,-1);
cout<<sub<<endl;

猜猜结果是啥,结果是5678也就是第一个参数对应的位置后面的所有的字符,也就是说
当第二参数为负数的时候,substr()函数的返回值是从i到最后一个字符的字串。

C++中的整数型字符串转整数,这样一定要记得

std::stoi(string)
std::to_string

这两个函数一定要会灵活运用,这一些是必不可少的,那问你一个问题,如何从控制台输入提取两个浮点数?
比如,输入

m=3.1234,b=3.232

要求你提取出m,b的值?
这里有两种方法。1通过字符分割的方式求出小数的整数部分和小数部分,然后将两个部分加起来,这种方法比较费时间,但是如果是不知道其他函数库的情况下迫不得已也是没有办法的啦

double ExtratEnd(string s)
{
//输入类似于"m=3.1412926";
	s = "m=3.141573";
	//输入: 3.1415926 步骤:找到等号,找到逗号,截取逗号后面一段和等号到逗号的一段
	int dot = s.find('.', 0);
	int equ = s.find('=', 0);
	string zhengshu = s.substr(equ + 1, dot - equ - 1);
	int z = stoi(zhengshu);//整数部分
	string xiaoshu = s.substr(dot + 1, -1);
	int x = stoi(xiaoshu);//小数部分,整数部分转化为double类型然后加上小数部分的整数/1000000.。。0的个数是xiaoshu的位数
	double res = (double)z + (double(x) / (double)(pow(10, xiaoshu.size())));

	cout << xiaoshu<<endl;
	cout << res << endl;
	double i = 0;
	return i;


}

思路二
我们知道,直接从输入流中传入给一个浮点型的变量是可以的。类似于这样:

#include<iostream>
using namespace std;
double s;//本地浮点型变量
cin>>s;//从输入流中传输给浮点型的变量

但是这种只是适合于纯数字类型的输入流,当类似于“m=3.1415938”;这种就没有办法处理了
实际上呢可以有这样一种处理方法:

string a = "123.32";  //一个字符串
	double res;//浮点变量用于接受
	stringstream ss;//字符流对象
	ss << a;//将字符输出给字符流对象
	ss >> res;//字符流对象输入给浮点型数据进行自动转化
	cout <<res << endl;
	cin.get();

我们首先提取出字符变量“4.2312”;然后将其转化为一个流对象,既然不能转化为cin对象,我们就将其专户为字符串流对象

stringstream ss;

再利用变量输出到流对象,流对象输入到数字变量的方式可以实现转化。

《fstream》

既然都讲到这里了,我们干脆来回忆一下文件流对象:
文件流对象进行输出和输入的过程为:
写文件流程:`

1 包含头文件
#include<fstream>
2创建输出流对象
ofstream ofs;
3 开发文件
ofs.open(filename,open_option);
4 写入字符数据
ofs<<"写入的数据";
5 关闭输出流对象

其中的open_option一定要记得,这种面试笔试中最最最最常考的内容:

开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

读文件流程:

#include <fstream>//包含流头文件
#include <string>
void test01()
{
	ifstream ifs;  //创建输入流对象
	ifs.open("test.txt", ios::in);//以一定的方式打开文件

	if (!ifs.is_open())	//异常检测,判断文件是否打开成功
	{
		cout << "文件打开失败" << endl;
		return;
	}

	//第一种方式
	//char buf[1024] = { 0 };
	//while (ifs >> buf)
	//{
	//	cout << buf << endl;
	//}

	//第二种
	//char buf[1024] = { 0 };
	//while (ifs.getline(buf,sizeof(buf)))
	//{
	//	cout << buf << endl;
	//}

	//第三种
	//string buf;
	//while (getline(ifs, buf))
	//{
	//	cout << buf << endl;
	//}

	char c;     //记住最常用的几种方式
	while ((c = ifs.get()) != EOF)
	{
		cout << c;
	}

	ifs.close();


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值