字符串的读入注意事项

众所周知,字符串的读入方式有很多种,但是不同读入方式拼起来的时候总是会产生一些奇奇怪怪的问题。

getchar() :读入一个字符,啥都能读,包括 空格 和 回车。

cin:读入一个字符串,不读空格。遇到空格和回车停止但是不读入空格和回车!但会忽略上次读入剩下的回车!

scanf("%s", s) :读入一个字符串,不读空格。遇到空格和回车停止但是不读入空格和回车!但会忽略上次读入剩下的回车!

gets(s) (C++14 好像不能用了):读入一行字符串,读入空格。遇到回车停止但是不读入回车。如果上次使用 gets 读入,会忽略上次读入剩下的回车,否则不会忽略!(解决方法是在上次读入后面加一个 getchar() 把回车读掉)

scanf("%[^'\n']", s):读入一行字符串,注意事项同 gets(s)但是不管上次使用什么东西读入,如果有回车,这次读入依旧会先读入回车。(\n 两侧的单引号加不加无所谓)

getline(cin, s) (C++14 好像不能用了):读入一行字符串,字符串 s 的类型必须是 string 类。具体注意事项同 gets(s),但是它没有 scanf("%[^'\n']", s) 这个方法的问题。

注:上面提到的 上次读入 同样包括读入整数,字符串等一系列情况,但是不包括使用快读读入。

快读的写法有很多种,至少我的快读可以把末尾的回车读掉。

读到但不读入:指本次读入了这个字符,但是下次开始读的时候依旧会读入它。


如果有补充或者纠错欢迎提出

posted @ 2022-03-15 17:53  Suzt_ilymtics  阅读(90)  评论(0编辑  收藏  举报