[学习笔记]对于输入输出的探索(简略,待深入)

问题的发现:

问题一:分割字符

将多组类似下方的数据按‘:’分割存储
1:0-0:unaccepted
1:0-1:accepted
2:0-2:unaccepted
2:0-3:accepted
2:0-4:unaccepted
3:0-5:unaccepted
4:0-6:accepted

问题二:将字符串类型转换成Int类型

将字符串类型转换成Int类型

问题一:分割字符

c语言方法,用strtok()函数分割

尚未实践

c++方法

方法一:使用getline() 

使用string流,再用getline()函数分割

getline()的完整标签
std::istream& getline(std::istream& is, std::string& str, char delim);
  • is: 输入流,可以是std::cinstd::ifstream等。
  • str: 用于存储读取文本的字符串。
  • delim: 分隔符,表示在哪个字符处停止读取。
缺点

1.只能将流中数据存储进字符串。

2.分割只能为单个字符。

个人实际示例
#include<iostream>
#include<sstream>
#include<string> 

using namespace std;

int main() 
{
	int n,k;  //n个题目,k次提交 
	cin>> n >> k;
	string data;	
	string num[k];
	string time[k];
	string res[k];
	string toke;
	for(int i=0;i<k;i++)
	{
		cin>>data;
		stringstream ss(data);
		getline(ss,toke,':');
		num[i] = toke;
		getline(ss,toke,':');
		time[i] = toke;
		getline(ss,toke);
		res[i] = toke;
	}
	
	for(int i=0;i<k;i++)
	{
		cout<<num[i]<<"\n"<<time[i]<<"\n"<<res[i]<<"\n";
	}
 }

结果 

4 7
1:0-0:unaccepted
1:0-1:accepted
2:0-2:unaccepted
2:0-3:accepted
2:0-4:unaccepted
3:0-5:unaccepted
4:0-6:accepted
1
0-0
unaccepted
1
0-1
accepted
2
0-2
unaccepted
2
0-3
accepted
2
0-4
unaccepted
3
0-5
unaccepted
4
0-6
accepted

方法二:cin.getline()

通过结束标志,或者字符个数的限制,分割存储字符。

cin.getline()的完整形式:

cin.getlien(字符数组名,字符个数,结束标志)

cin.getline(string str,int n,char a) 

 问题二:将字符串类型转换成Int类型

方法一:使用流stingstream

使用stingstrea(),将字符转为流,在从流中,把数据以int的形式存入变量当中.

#include<iostream>
#include<sstream>
#include<string> 

using namespace std;
int main()
{
	stringstream ss("2-1"); 
	int a,b;
	char gar; //用gar将当个字符-从流中提出 
	ss>>a>>gar>>b;
	cout<<a<<"\n"<<b<<"\n";
}

 方法二:使用 stoi 函数

暂未实践

额外知识:缓冲区与流

流的概念:

类似河流一般,将数据按顺序流出流入。常见流如"istream","ostream"。

缓冲区的意义:

让设备不用一直读写,提高效率,先用缓冲区(内存中的一个区域)将数据存储,再在有需要读写的时候,将缓冲区的数据读入。

联系:

数据先写入缓冲区,流的操作在从缓冲区中提取数据到流中。(个人理解,可能有错)

参考文章:

什么是缓冲区(buffer),什么是缓存(cache)_数据缓冲区-CSDN博客

【C++】I/O概念框架:流、缓冲区、文件 - 知乎

chatgpt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值