C语⾔while循环中逗号表达式的⽤法(以及怎么读⼊引号中有空格的字符
串)
⽂章⽬录c语言中逗号表达式的用法
引⾔
今天在刷算法题的时候,遇到点⼉问题:
对于如下的m组数据:
name "David Beckham"
email "david@beckham"
需求是把前者替换成后者,举个例⼦,遇到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;//读⼊第⼆个引号之前的字符
逗号表达式
依次从左往右执⾏,以最后⼀个表达式的值为结果。
对于引⾔中题⽬,有兴趣的读者可以尝试⼀下,是⼀道字符串处理题,本⾝不难。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。