c++/python 的输入和输出(acm刷题模式)


c++/python 的输入和输出

最近刷题,发现有些厂商的机试需要写输入输出,而自己经验较少,再次总结一下。方便自己查阅。


一、C++输入和输出

C++输入一般包括cin, get等。

1. C++输入

输入常用的是cin。 需要 包含头文件

#include <iostream>

cin

cin会在**’空格’、‘Tab’、'回车’处截断,
cin语句执行完后
不会舍弃**最后一个结束符(tab键、空格键、回车键),它被留在缓冲区。

string input = "";
cin >> input;

//这时读入一个字符
>>a 2
//这时读入两个字符    
>>a2 b

//读入一个整数
int num;
cin >> num 
// 读入一个矩阵
// 第一行是 行和列
// 然后是矩阵
// 1 2 3
// 4 5 6
#include <iostream>
#include <vector>
using namespace std;
int main() {
	int m, n;
	cin >> m >> n;
	vector<vector<int>> maxtrix(m, vector<int>(n, 0));
	for (int i=0; i<m; i++) {
		for (int j=0; j<n; j++) {
			int temp;
			cin >> temp;
			matrix[i][j] = temp;	
		}
	}
	return 0;
}

getline(cin,string)

getline()属于string流,需要include头文件iostream, string

#include <iostream>
#include <string>

geline(cin,string类型名,结束符)是string类的输入注意和cin.getline区别,所以不指定长度。默认是以回车结束,值得注意的是,它与cin.getline不同,getline函数只丢弃输入的结束符,结束符后面的输入信息不丢弃。

string input;
getline(cin, input);
cout << input;
//这时读入三个字符
>>a 2
a 2

cin.getline(接收字符串数组的名称,接收字符个数,结束字符) 和 cin.get()

cin.getline()属于istream流,从输入流中获得指定长度字符,赋值给数组或字符指针

char input[100];
cin.getline(input, 3);
cout << input << endl;

///必须为字符串数组  不能为string
>>abcd
>>ab   //接收的最后一个为'\0',所以只看到2个字符输出

与cin.getline()类似,不同之处在于cin.get()函数录入到终止字符后, 控制输入流的指针指在了终止字符,后面的被放在缓冲区,而getline函数()遇到终止字符后指针位置在终止字符后面。

不能将两个cin.get()连用,除非中间添加cin.ignore()

常用cin.get()来读取回车,因为当遇到回车这个终止字符时会停留在这,而cin.getline()则停留在后面的字符

char input[100];
cin.get(input, 30, '#');
cout << input << endl;
//cin.ignore();
cin.get(input, 30, '#');
cout << input << endl;

>>This is the first get.#This is the second get.#
>>This is the first get.
//
char input[100];
cin.get(input, 30, '#');
cout << input << endl;
cin.ignore();
cin.get(input, 30, '#');
cout << input << endl;    
    
>>This is the first get.#This is the second get.#
>>This is the first get.
This is the second get.

getchar()

getchar()是C语言中的函数,C++中也包含了该函数(不用加stdio.h)。getchar()函数的作用是从标准的输入stdin中读取字符。也就是说,getchar()函数以字符为单位对输入的数据进行读取。

//直接使用
char test1 = getchar();

C语言的gets()

读取整行输入,直至遇到换行符,然后丢弃换行符,储存其余字符,并在其末尾添加一个空字符使其成为一个字符串。用时需要include头文件stdio.h

#include <stdio.h>
char str[length]; 
gets(str);

C语言得get_s

gets_s函数只从标准输入中读取,第二个参数为最多读取的长度,一般就是数组的大小。gets_s函数读到的如果超出了字符数组的大小就会报错。


#include<stdio.h>
 
int main()
{
	char a[5];
	gets_s(a, 5);
	printf("\n");
	puts(a);
 
	return 0;
}

C++输出

cout

C++常用函数

1. cin自带类型转换:

#include <iostream>
using namespace std;
int main() {
	int result; //定义一个整型
	cin >> result; //输入一个数字会默认转为int
	cout << result;
	return 0;
}

2. stringstream

使用stringstream需要头文件**#include **.是一个string 流。

// 输入一个矩阵
// 3 2 3
// 1 6 5
// 7 8 9
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
	string input;
	vector<vector<int>> matrix;
	while (getline(cin, input)) {
		if (input.size() > 0) {
			sstream streamstr(input);
			int temp;
			vector<int> a;
			while (streamstr >> temp) {
				a.push_back(temp);
			}
			matrix.push_back(a);
			
		}
		else {
			break;
		}
	}	
}

反转(reverse)

reverse是C++下的库函数,可用于翻转字符串,翻转链表等
#include<algorithm>

reverse(str.begin(),str.end()) //反转字符串
 	 
reverse(vector.begin(),vector.end()) //反转向量reverse(a,a+strlen(a)) //反转数组

C++ 字符串操作

头文件 #include <string>

截取(s.substr)

string str = "asdas";
// string substr(size_t pos, size_t len);  //返回从索引pose开始,长度为len的字符串
cout << str.substr(0, len);

转为10进制(stoi), int & str

#include <string>

string str = "123"
int stoi (const string&  str, size_t* idx = 0, int base = 10); 
//stoi(字符串,**起始位置**,n进制),idx是字符串的起始位置。将 base 进制的**字符串**转化为十进制,  base默认是10进制, 
int temp = stoi(str);
// int to str
#include <string>
int num;
string str = to_string(num);

分割(strtok)

#include <string>

/* 获取第一个子字符串 */
   string str = "dasdasfaasfasfsafasf"
   token = strtok(str, "a");
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
      token = strtok(NULL, s);
   }
   

判断是否是数字(isdigit),大小写(isupper)(islower)

#include <string>
using namespace std;

string str = "01234";
for (char& c:str) {
	cout << isdigit(c) << endl;
	cout << isupper(c) << endl;
	cout << islower(c) << endl;
	// toupper(), tolower()
	cout << toupper(c) << endl;
	cout << tolower(c) << endl;
	
}

插入、删除

// 删除第i个元素, 复杂度为n,中间有平移操作

// 删除第i个元素, 复杂度为n,中间有平移操作
str.erase(s.begin() + i);
// 第i个位置插入
str.insert(i, chr); // str.insert(1,'a');

//最后位置插入,删除
str.push_back(chr); // 在最后一个位置插入 
str.pop_back(); // 删除最后一个

排序(sort), 反转(reverse)

#include <algorithm>
//默认从小到大
sort(str.begin(), str.end());
reverse(str.begin(), str.end());
// 按自己的设置规则排序
// a>b为降序;a<b为升序。
bool cmp(const int &a, const int &b){  
    return a>b;  
}  
int a[10];  
sort(a,a+10,cmp); 

二. python 输入

1. 输入 — input()

Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。默认换行符结束。

>>>a = input("input:")
input:123                  # 输入整数
>>> type(a)
<class 'str'>              # 字符串
>>> a = input("input:")    
input:runoob              # 正确,字符串表达式
>>> type(a)
<class 'str'>             # 字符串
#!/usr/bin/python
#输入三角形的三边长
a,b,c = (input("请输入三角形三边的长:").split())
a= int(a)
b= int(b)
c= int(c)

#计算三角形的半周长p
p=(a+b+c)/2

#计算三角形的面积s
s=(p*(p-a)*(p-b)*(p-c))**0.5

#输出三角形的面积
print("三角形面积为:",format(s,'.2f'))
请输入三角形三边的长:3 4 5
三角形面积为: 6.00
# 输入矩阵
n = int(input()) # n行
arr = []
for i in range(n):
    arr.append(list(map(int, input().rstrip().split())))
print(arr)

2. 输出 — print()

print() 方法用于打印输出,最常见的一个函数。

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep -- 用来间隔多个对象,默认值是一个空格。
end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file -- 要写入的文件对象。
flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

例子

>>> print("www","runoob","com",sep=".")  # 设置间隔符
www.runoob.com

import time

print("---RUNOOB EXAMPLE : Loading 效果---")

print("Loading",end = "")
for i in range(20):
    print(".",end = '',flush = True)
    time.sleep(0.5)

参考文献

输入输出

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值