字串的讀入注意事項
阿新 • • 發佈:2022-03-15
眾所周知,字串的讀入方式有很多種,但是不同讀入方式拼起來的時候總是會產生一些奇奇怪怪的問題。
getchar()
:讀入一個字元,啥都能讀,包括 空格 和 回車。
cin
:讀入一個字串,不讀空格。遇到空格和回車停止但是不讀入空格和回車!但會忽略上次讀入剩下的回車!
scanf("%s", s)
:讀入一個字串,不讀空格。遇到空格和回車停止但是不讀入空格和回車!但會忽略上次讀入剩下的回車!
gets(s)
:讀入一行字串,讀入空格。遇到回車停止但是不讀入回車。如果上次使用 gets 讀入,會忽略上次讀入剩下的回車,否則不會忽略!(解決方法是在上次讀入後面加一個 getchar()
把回車讀掉)
scanf("%[^'\n']", s)
gets(s)
,但是不管上次使用什麼東西讀入,如果有回車,這次讀入依舊會先讀入回車。(\n
兩側的單引號加不加無所謂)
getline(cin, s)
:讀入一行字串,字串 s
的型別必須是 string
類。具體注意事項同 gets(s)
,但是它沒有 scanf("%[^'\n']", s)
這個方法的問題。
注:上面提到的 上次讀入
同樣包括讀入整數,字串等一系列情況,但是不包括使用快讀讀入。
快讀的寫法有很多種,至少我的快讀可以把末尾的回車讀掉。
讀到但不讀入
:指本次讀入了這個字元,但是下次開始讀的時候依舊會讀入它。
如果有補充或者糾錯歡迎提出