字符/字符串的輸入/輸出


 

在寫C/C++時,字符/字符串的I/O一直是一件讓我非常頭疼的事情。

提前聲明:C字符串為char[]或char *類型,#include <string.h>

    而C++字符串為string類型。#include <string>

 

遇到的問題:

1.初始化問題

定義C字符串時,有如下問題

char str[] = "hello world";//必須初始化
char str[3];//想要不初始化,必須指定長度
char* str;//沒有分配內存,且無法用字符串常量初始化,否則報錯:
                //"const char *" 類型的值不能用於初始化 "char *" 類型的實體

C++字符串不存在這種問題。

2.字符串長度未知。

對C字符串來說,長度未知所以無法指定長度,需要用戶輸入因此也不可能初始化。

解決方法只有兩種:1.指定足夠大的長度;2.動態分配內存。

 

對C++字符串來說,string類型本身就不需要指定長度,隨時可以賦值初始化,不存在這種問題。

3.字符串中存在空白字符,比如空格等。

C字符串處理這種情況比較簡單,單個字符依次讀入,或者整個字符串讀入均可。但是如果問題2,3同時出現就相當麻煩了。

單個字符依次讀入可參考getchar()和cin.get()。

整個字符串讀入可參考gets_s()和cin.getline()以及scanf()利用正則表達式格式化讀入。//gets()已被新標准廢除。

參數必須是已分配內存的字符數組。

 

C++字符串讀入通常用cin,但是會遇到空白字符提前結束。

因此建議使用getline(cin,str,'\n') //第三個參數默認是‘\n',可以不寫;第一個參數也可以是文件流

注意這里的getline()和上面的cin.getline()參數是不同的,不要混淆。

 

暫時就想到這么多。待續……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM