文章目录

  • 引言
  • 解决方法
  • 总结

引言

今天在刷算法题的时候,遇到点儿问题:

对于如下的m组数据:

name "David Beckham"
email "david@beckham.com"

需求是把前者替换成后者,举个例子,遇到name,就把它替换成David Beckham(并且没有引号),所以我需要用hash表把它们的映射关系存起来。

可是问题来了。

这样的数据我该怎么读入呢?

对于name,我可以用cin, 可以后面“ ”内的内容还包括空格,这该如何处理呢? 用cin不行,因为cin用空格作为分隔符;用stringstream也不行,因为它也是按照空格切分的。

解决方法

最后的解决方案是利用getchar,一个字符一个字符的读!!

具体代码如下:


while(m -- ){string key, value;cin >> key; // 读入前者char c;//  读掉name 和“” 之间的空格,以及第一个引号while(c = getchar(), c != '\"'); // 读入“ ”之间的内容,遇到第二个引号停止读入while(c = getchar(), c != '\"') value += c;hash[key] = value;
}

这种处理方法很好地解决了我的需求。

下面简单地介绍一下上述代码中while(___, _____)这种用法

以它为例:

 while(c = getchar(), c != '\"');

逗号表达式:从左往右读,并且以最后一个值作为结果。
在这里,对于while循环,首先执行c = getchar(),它读入一个字符,然后执行c != ‘"’,判断字符c 是否等于引号,如果满足c != ‘"’,则执行while循环体,如果不满足则不执行循环体。

再举一个简单的例子,

while(cin >> n , n){...
}

这里while循环也用到逗号表达式,先执行cin >> n, 读入一个数值n,然后第二个表达式,判断n是否为0,如果满足第二个表达式(不为零),则继续读入;

这种常用来读入:数据以0结尾。

总结

怎么读入引号具体的值? 具体要求是舍弃引号,并且引号内部有空格。

采用getchar来读:

string value;
char c;
while(c = gechar(), c != '\"'); //过滤掉第一个引号,以及前面的东西
while(c = getchar(), c != '\"') value += c; //读入第二个引号之前的字符

逗号表达式
依次从左往右执行,以最后一个表达式的值为结果。

对于引言中题目,有兴趣的读者可以尝试一下,是一道字符串处理题,本身不难。CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入

C语言while循环中逗号表达式的用法(以及怎么读入引号中有空格的字符串!!!)相关推荐

  1. el表达式ne什么意思_JSP中EL表达式的用法详解(必看篇)

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  2. C语言中逗号表达式的使用

    转自某位大神 c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5, ...

  3. C语言逗号表达式赋值、野指针成因、用户标识符、字符串赋值的几个概念

    目录 题目 背景概念梳理 逗号表达式 野指针成因 用户标识符 字符串赋值 解题过程 正确答案 整体代码 参考链接 题目 一.输出x及a的结果 int main(){int x,a;x = (a=3, ...

  4. go语言for循环中修改临时变量无效

    总结 1. for循环中,遍历变量是临时变量,修改不影响原始变量 2. for循环中如果想修改原始变量,可以直接修改原始变量本身才行 实验如下图 代码如下 package main import &q ...

  5. 逗号表达式 java_逗号表达式的用法

    好久没有因为程序的魅力而发出这样的感慨和兴奋了,从接触C语言到C++,再到Java,当然还接触过许多其他乱七八糟的语言,一直都知道有个逗号表达式,但是从来都没有用过,除了在for语句中不疼不痒的用过几 ...

  6. JSP中EL表达式的用法详解(必看篇)

    转自:https://www.jb51.net/article/105314.htm EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL ...

  7. labVIEW while循环中的移位寄存器的用法及作用

    目录 一.LabVIEW  while循环中的移位寄存器的创建和使用 1.首先打开LabVIEW,在前面板中添加结构中的while循环 2.右击while循环的边框创建添加移位寄存器,这两个移位寄存器 ...

  8. 01-有关C语言while循环中的小问题

    最近在做题时偶然发现关于while循环的小问题,便记录下来. 1.问题主要是关于while循环如果不加大括号会有什么影响,如下: 根据C语言规定,循环体如果包含一个以上的语句,应该用花括号括起来,作为 ...

  9. c语言while循环中直接分号问题

    C语言 对于这样的while循环语句,例如 while(isspace(c = getch())) ; 该语句表示一个空循环,只执行while中的语句,只要条件为真,就无限循环下去!

最新文章

  1. AS3 Drawing API演讲稿
  2. LeetCode_349. 两个数组的交集
  3. Android Annotation-让你的代码更加优雅(二)做一个Java诗人(JavaPoet)
  4. android 单机斗地主,单机斗地主
  5. 负数的开方到底等于多少?
  6. 关于Django中的数据库操作API之distinct去重的一个误传
  7. APACHE ACTIVEMQ安装
  8. OPENSTACK在RHEL7安装;admin创建虚拟机模板供demo使用
  9. note8 升级android9,明年升!三星七大旗舰集体获安卓9.0认证:这阵容赢了!
  10. Python基础笔记(手写版)
  11. EndNote X9破解之后遇到的问题
  12. 命令行如何 copy 文件内容到剪切板(clipboard)?
  13. 计算机学院志愿公益活动,计算机科学与技术学院志愿者走进“君子残疾人之家”...
  14. matsuri.icu 筛选单场直播中 指定用户的弹幕
  15. 第3周项目1-顺序表的基本运算
  16. C语言数码管是共阴共阳程序,成功C DIY 单片机(2)51单片机直接驱动共阴极数码管...
  17. ARM Linux异常处理之data abort(一)
  18. 安卓开发之EventBus使用
  19. 结构体【struct】
  20. Mac Charles 抓包 iPhone Https(详细流程)

热门文章

  1. 市场营销2:怎样用营销和销售来快速迭代定位客户
  2. java 类名后加变量名是什么意思?
  3. .NET Framework 中新托管 Direct3D 图形 API 的简介
  4. makefile中的wildcard 、patsubst、
  5. 【Python监控CPU】一款超治愈的RunCat监控应用系统上线啦~爆赞,颜值拉满啊
  6. 浙江大学墙裂推荐的超高人气《看漫画学Python》回来啦
  7. LEDEasyVIdeo(LED联机软件)v4.6.8官方版
  8. Windows关机自动更新,开机蓝屏,只要一个键直接忽略蓝屏
  9. 教程:关于Google Play无法正常使用解决方法的一些指导建议.
  10. @Value(“$“)取值: