读取输入中字符流的常用函数为getline,其有两种实现:
1、<istream>中提供的getline()函数
istream& getline (char* s, streamsize n);
istream& getline (char* s, streamsize n, char delim);
调用的时候直接
cin.getline()
。
2、<string>中提供的getline()函数
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
注:
getline默认按行读取,不含换行符
。
下面列出一些使用示例代码。
①读取一行
#include <iostream>
char szbuf[128] = {0};
while(cin.getline(szbuf, 128))
cout << szbuf << endl;
gets、cin.getline读取一行数据,遇换行结束读取。
②读取输入,遇空格结束
#include <iostream>
#include <string>
string str1, str2;
while(cin >> str1 >> str2) //循环读入多行,每行两个字符串,中间空格分隔
scanf、cin都是读取输入,遇空格结束。
③读取一行后,以空格分隔读取各个子串
#include <iostream>
#include <string>
#include <sstream>
string str_line;
getline(cin, str_line)
stringstream ss(str_line);
string str_tmp;
while(ss >> str_num)
cout << str_tmp;
这里使用sstream提供的stringstream类,默认可以按空格分隔读取字符串。
④读取一行字符串后,以逗号分隔读取各个子串
#include <iostream>
#include <string>
#include <sstream>
string str_line;
while(getline(cin, str_line))
stringstream ss(str_line);
string str_tmp;
set<string> s_sorted_str;
while(getline(ss, str_tmp, ','))
cout << str_tmp;
⑤从文件中按行读取,打印以逗号为分隔的每个字符串
#include <iostream>
#include <fstream>
#include <sstream>
ifstream in_file("data.txt");
string str_line;
while(getline(in_file, str_line, ','))
string str_tmp;
stringstream ss(str_line);
while (ss >> str_tmp)
cout << str_tmp << " ";
in_file.close();
一、cin和getline同时使用易错点
当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。
在使用getline读入一整行时,若是前面是使用getchar()、cin这类读入了一个字母,但是不会读入后续换行’\n’符号或者空格的输入时,再接getline()就容易出现问题。比如:
/* 输入 :
#include <iostream>
#include &
C++分割带逗号的字符串1. 解决方法2. 代码实现
我们知道,C++默认通过空格(或回车)来分割字符串输入,即区分不同的字符串输入。但是有时候,我们得到的字符串是用逗号来分割的,给我们使用者带来极大的不便。
那么,有什么办法能更加方便的使用这些字符串呢?其实,C++提供了一种方法(我目前所知道的)来解决这个问题。
1. 解决方法
C++提供了一个类 istringstream ,其构造函数...
print('...', var1, '...', var2, '...', ..., sep=' ', end='\\n')
print('...%att...%att...'%(var1, var2, ...))
print('...{index:att}...{index:att}...'.format(var1, var2, ...))
print(f'...{var1:att}...{var2:att}...') #3.6+的版本
如果在刚开始学习算法,做算法题的时候,题上经常会要求输入多组数据,对于刚开始学习的小白来说,可能不知道怎么算输入多组数据,也不知道该怎么处理,刚好想起来,就把方法记录一下
怎么算输入多组数据?
一般题中要求输入多组数据的意思就是读取数量不定的输入数据(不能确定输入数据的数量),在这种情况下,需要不断读取数据直至没有新的输入为止。
#include <stdio>
int main()
int a;
while(scanf(%d,&a)!=EOF)
printf(%d\n,a);
return 0;
上面是使用C语言的的方法
// 请输入一段整数,并用空格隔开,然后会输出结果
cout << "Please enter a string of positive numbers separated by Spaces: " << endl;
(一)最简单的C++程序
main前面int的作用是声明函数的类型为整型。标准C++要求main函数必须声明为Int型。有的操作系统(如UNIX,Linux)要求执行一个程序后必须向操作系统返回一个数值。因此C++的处理是这样的:如果程序正常 ,则向操作系统返回数值0,否则返回数值-1。如果主函数首行写成void main()也能通过。只要记住在main前面加int,同时...
python-对excel操作用法详解读excel1.打开excel文件2.获取行数和列数3.获取整行和整列的值,以列表形式返回4.获取单元格数据5.使用行列索引来获取单元格数据写excel1.创建workbook2.创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格3.向表中添加数据4.保存追加数据
读excel
import xlrd
1.打开excel文件
data = xlrd.open_workbook(r"./my.xls")
table1 = data.sheets()[0] #通过索引顺序获取
table2 = data.sheet_by_index(
fstream f(dictionary.txt);//创建一个fstream文件流对象
vector words; //创建一个vector对象
string line; //保存读入的每一行
while(getline(f,line))//会自动把\n换行符去掉
words.push_back(line);
//dictionary.tx
也可以使用 strchr 函数来查找字符串中是否存在换行符:
char str[] = "hello\nworld";
char *p = strchr(str, '\n');
if (p != NULL)
// ...
创建一个学生成绩文件,读入文件后,完成学生成绩的统计和分级,计算该班级平均成绩和五级制的人数统计,并输出文件。
利用标准输入输出流(cin 和 cout)输入学生的成绩
利用 for 或者 while 循环接收学生的成绩
对学生成绩进行 5 级制分级
统计班级学生的平均成绩
#include <iostream>
using namespace std;
int main()
int avgGrade=0,coutStudent=0,Grade=0;
cerr&l.