c++存儲字符串的方法( 讀取字符串、char 數組、string 類型)

0、 讀取字符串

c++ 讀取字符串的方式有很多,除了常用的scanf()、cin>>,還有其他函數,參見:C++基礎:各種輸入方法總結,cin、cin.get()、cin.getline()、getline()、gets()、getchar()

總結:

函數名 數據類型 是否讀入
空格
是否讀入
回車
讀入是否保存 注意 解決方法
scanf() 不讀入 不讀入 不保存
cin>> int,float,char,char*,string等諸多類型 不讀入 不讀入 不保存 當緩衝區中有殘留數據時,cin函數會直接取殘留數據,而不會請求鍵盤輸入 cin.sync()清空輸入緩衝區
cin.get(字符數組名,接收長度,結束符) char* 自定義 自定義 保存 1.“結束符”爲可選參數,默認回車
2.回車會保存
3.輸入的字符串超長時,不會出錯。繼續執行cin時,直接從緩衝區中取數據
在語句後面加:cin.get()或寫到一塊:cin.get(ch2,6).get()
cin.getline(字符數組名,接收長度,結束符) char* 自定義 自定義 保存 輸入超長出錯,且後面的cin操作不執行
getline(istream is,string str,結束符) string 自定義 自定義 保存 在string庫函數下,而非istream,調用前加 #include < string>
gets(char *ch) char*

注:結束符(Space、Tab、Enter)


1、char 數組

爲char數組賦初值有以下8種情況。

#include <stdio.h>
#include <string.h>

int main()
{
    char c1[]={'h','e','l','l','o'};
    char c2[5]={'h','e','l','l','o'};
    char c3[]={'h','e','l','l','o','\0'};
    char c8[]={'h','e','l','l','o','\0','a','b','c'};

    char c4[]="hello";
    char c5[6]="hello";

    char c6[5];
    char c7[10];

    scanf("%s",c6);
    scanf("%s",c7);
    printf("c1:%s,長度:%d,佔內存:%d\n",c1,strlen(c1),sizeof(c1));
    printf("c2:%s,長度:%d,佔內存:%d\n",c2,strlen(c2),sizeof(c2));
    printf("c3:%s,長度:%d,佔內存:%d\n",c3,strlen(c3),sizeof(c3));
    printf("c8:%s,長度:%d,佔內存:%d\n\n",c8,strlen(c8),sizeof(c8));

    printf("c4:%s,長度:%d,佔內存:%d\n",c4,strlen(c4),sizeof(c4));
    printf("c5:%s,長度:%d,佔內存:%d\n\n",c5,strlen(c5),sizeof(c5));

    printf("c6:%s,長度:%d,佔內存:%d\n",c6,strlen(c6),sizeof(c6));
    printf("c7:%s,長度:%d,佔內存:%d\n\n",c7,strlen(c7),sizeof(c7));
    printf("c7[5]:%d,c7[6]:%d,c7[7]:%d,c7[8]:%d,c7[9]:%d\n",c7[5],c7[6],c7[7],c7[8],c7[9]);
    return 0;
}


系統通過判斷是否遇到’\0’,來決定是否終止字符串輸出。我們平時使用時並沒有專門加過’\0’,那麼:

一、怎樣爲char數組賦值,系統會自動在結尾加上’\0’呢?不同賦值方式實際佔用內存是怎樣的呢?
當以字符串形式在代碼中爲數組賦值時,系統會自動爲’\0’開一個存儲空間。其他方式該是多少就是多少。

二、不同方式爲char數組賦值,字符串長度是否一樣呢?
字符串的長度都相同,且字符串的長度不包括’\0’。

在這裏插入圖片描述


2、string 類型

c++可以通過包含頭文件string的方式定義string類型。

1)使用length()size()函數可以獲取字符串長度,也可以將string轉爲char[]後使用strlen()求長度;
2)使用str[i]獲取指定位置的字符。

具體使用方法及函數介紹,參見:C++string類總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章