在处理输入的时候,有时需要输入一整行字符串,而字符串中包含类似空格,tab这样的特殊符号,直接用cin读入时不能得到预期效果,这里介绍一下C++中的整行字符串读入方法。

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);

注意:delim是结束标志符号,缺省值为'\n'即换行符。

实例代码:

#include <bits/stdc++.h>using namespace std;int main(int argc, char *argv[]) {   cout << "argc = " << argc << endl;for(int i = 0; i < argc; ++i) {cout << "argument[" << i << "] : " << argv[i] << endl;}string my_string;while(getline(cin, my_string)) {cout << my_string << endl;}return 0;
}

当我们把getline中的缺省值改成'r'时,my_string得到是每行输入字符串中第一个r出现之前的部分,如果第一个字符就是r,则my_string为空串。

getline(cin, my_string, 'r');

值得注意的是,如上例子,第一行读入"You need a rest!"后遇到第一个分割符号'r',此时my_string为"You need a",但是后面的"est!"并没有被忽略到,事实上,my_string会记录两个分割符号之间的所有符号包括回车,不像划分字符串的函数strtok,参数中可以有多个分割符号,所以使用getline()函数的第三个参数时需要注意。

char * strtok ( char * str, const char * delimiters );

注意,这里的参数时char*亦即字符串数组。

#include <bits/stdc++.h>using namespace std;int main(int argc, char *argv[]) {/**cerr << "argc = " << argc << endl;for(int i = 0; i < argc; ++i) {cerr << "argument[" << i << "] : " << argv[i] << endl;}***/string my_string;while(getline(cin, my_string, '\n')) {// cout << my_string << endl;char *pch;cout << "Splitting my_string \'" << my_string << "\' in tokens." << endl;char str[128];// c_str()返回的是一个临时指针,不能直接复制strcpy(str, my_string.c_str()); cout << str << endl;pch = strtok(str, " -,.");  // 空格,'-',',','.'都是分隔符while(pch != NULL) {cout << pch << endl;pch = strtok(NULL, " -,.");  // 注意这里是NULL}}return 0;
}

测试结果如下:

C++ 读入整行带空格的字符串,并将字符串按照特定符号划分成多个子串相关推荐

  1. cin读入多行用空格隔开的数字并放进不同vector-利用cin.get()

    合并有序链表 输入: 1 6 12 18 3 5 9 20 输出: 1 3 5 6 9 12 18 20 下面所说的忽略也可以理解成丢弃! 首先我们要用cin把用户的输入存入两个数组中. 很简单的一个 ...

  2. python字符串拼接带空格_使用Python连接字符串和空格

    当我运行此代码时,它的行为与预期的一样:x = int(input("Put number: ")) result_figure =[] xtempleft = x-1 xtemp ...

  3. C/C++中带空格的字符串的输入

    问题一:带空格的字符串输入(c++) 对于字符数组 方法一:getline() 读入整行数据,使用回车键输入的换行符来确定输入结尾. 调用方法: cin.getline(str, len) 第一个参数 ...

  4. C/C++如何整行读入字符串?

    在写代码的过程中,经常要一行一行的读入字符串进行处理,这里我总结了一些方法,供大家参考. 方法一:scanf()读入char[] 使用方法: char str[1024]; scanf("% ...

  5. 关于读入带空格的字符串与输入输出重定向

    一.读入带空格的字符串 由于NOIP官方开始使用C++14编译器,C语言中用于读取带空格字符串的gets()函数已经不可以再用了.作为替代,有以下方法. cin.getline()函数. 函数格式: ...

  6. C语言 输入是一整行的字符串

    输入是一整行的字符串的 C语法: char buf[20]; gets(buf); C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char bu ...

  7. shell 脚本比较字符串相等_比较带空格的字符串相等的Shell脚本 如何比较两个.....

    ****************************比较带空格的字符串相等的Shell脚本*************************** 如果要比较的字符串中间有空格,可以用下面的程序(摘 ...

  8. CFileDialog、CStdioFile读取文件中的内容,每行按空格依次读入

    CFileDialog.CStdioFile读取文件中的内容,每行按空格依次读入 注: 1.该文件为固定为3列的小数txt文件,且数字之间以空格隔开 2.CFileDialog 与 CStdioFil ...

  9. c#调用命令行遇到带空格的路径

    想用 c#调用如下的DOS命令: C:\Program Files\Common Files\System\DBWatcherInstall\dtexec.exe /f C:\Program File ...

最新文章

  1. 科学研究发现,盲人用时间感知空间
  2. shell下function报错
  3. salesforce 零基础学习(四十二)简单文件上传下载
  4. [翻译]在GridView中插入新记录
  5. Java IO流及应用(一)
  6. Modernizr使用指南
  7. 领域应用 | 阿里发布藏经阁计划,打造 AI 落地最强知识引擎
  8. 工程联盟管理平台、CRM、项目管理、合同管理、合作商管理、考勤管理、成本管理、指标管理、业主管理、工时报告、招投标、开票回单、物料库、培训中心、知识库、采购管理、Axure原型、产品原型、rp原型
  9. Python之 多重循环
  10. RSS源的搜索引擎优化方法
  11. mysql创建用户并授权语句_MySQL创建用户与授权
  12. 分享几个写英文论文的网页和软件
  13. 通用定时器产生PWM
  14. vue 实现打印与批量分页打印功能
  15. schtasks设置windows开机启动bat脚本
  16. 4年的数学竞赛学习,终于成就这位牛娃的北大保送之路!
  17. 从粗放式到精益化编程
  18. “你适合做开发吗”知乎Live问题集锦
  19. halcon 连接相机采集图像
  20. 软件架构师书籍及高效读书心得

热门文章

  1. UPC-购买巧克力(贪心)
  2. Docker(仓库)——Docker Hub 公共仓库+企业级私有仓库搭建流程
  3. jpg/png格式图片转eps格式的方法总结
  4. 计算机专业生综合能力,高职计算机专业生综合能力培养的探讨.doc
  5. Event causality extraction based on connectives analysis
  6. c语言实现FCFS SJF算法,实现FCFS和SJF调度算法.docx
  7. TCP/IP协议的send和recieve
  8. 互动媒体技术-十二个“一”的文艺创作
  9. JQuery实现鼠标拖动元素移动位置
  10. 傲梅分区助手专业版 v6.2 中文免费版