国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++char類型和輸入輸出優(yōu)化

C++char類型和輸入輸出優(yōu)化

2022-02-19 16:06Coder_LT C/C++

這篇文章主要介紹了C++char類型和輸入輸出優(yōu)化,char的全稱是character,也就是字符的意思。顧名思義,char類型是專門為了存儲字符而設(shè)計的。下面我們一起來看看文章的具體內(nèi)容吧

 

1、char類型

char的全稱是character,也就是字符的意思。顧名思義,char類型是專門為了存儲字符而設(shè)計的。

計算機存儲數(shù)字非常方便,只需要將其轉(zhuǎn)化成二進制即可。但存儲字符就有點麻煩了,一般都是通過對字符進行數(shù)字化編碼。這也就是為什么char類型本質(zhì)上是另外一種整數(shù),因為它存儲的其實是字符的數(shù)字編碼。

char一共有8個二進制位,即一個字節(jié),理論上能夠存儲256個字符。基本上足夠涵蓋計算機當(dāng)中所有的字母、標(biāo)點符號以及數(shù)字,即ASCII碼。

ASCII的全稱是美國信息交換標(biāo)準(zhǔn)代碼,它是一套電腦編碼系統(tǒng),包含了所有英文字母以及標(biāo)點符號和一些特殊字符。全表一共有128個字符,剛好可以用一個char(有符號)來存儲。

大家可以參考一下下表,Dec表示編號,Char表示字符。

C++char類型和輸入輸出優(yōu)化

其中數(shù)字0的編號是48,字母a的編號是97,大寫字母A的標(biāo)號是65。

當(dāng)我們把一個字符賦值給char型變量的時候,它會去查ASCII表,找到字符對應(yīng)的編號。同樣,當(dāng)我們使用%c輸出一個字符的時候,它也會去尋找char中存儲的編碼對應(yīng)的符號進行輸出。

既然字符在C++當(dāng)中都是以數(shù)字的形式存儲的,那么我們就可以對它來進行加減運算。

比如:

char c = "a";
cout << ++c << endl;


得到的結(jié)果是"b",有加自然也有減,我們也可以對它做減法操作。

char c = "b";
cout << --b << endl;


得到的結(jié)果就是"a"。

另外,我們還可以對于兩個char類型的變量進行減法操作。比如用得比較多的就是將字符型的數(shù)字轉(zhuǎn)成int型。

char c = "1";
int num = c - "0";


這樣我們得到的num就是數(shù)字型的1。

再比如,我們還可以通過大于小于符號來判斷char類型的范圍:

char c = "1";
if (c >= "0" && c <= "9") {
    cout << "c is a number" << endl;
}

 

2、getchar、putchar、cin.get、cout.put

getcharputchar都是C語言當(dāng)中專門面向字符IO的函數(shù),也就是讀入和輸出字符的函數(shù)。

因為確定了處理的數(shù)據(jù)類型是字符,不需要額外的格式說明,因此getcharputchar的效率要比scanf和printf更高。

所以在算法競賽領(lǐng)域,有人為了提升程序的性能,喪心病狂地使用getchar代替scanf來讀入數(shù)據(jù)。

我這里貼一段使用getchar來讀入int型的代碼,給大家做一個參考。這個屬于標(biāo)準(zhǔn)的奇淫技巧,不推薦使用。

void read(int &x) {
    int f = 1; x = 0; char s = getchar();
    while (s < "0" || s > "9") {
        if (s == "-") {
            f = -1;
            s = getchar();
        }
    }
    while (s >= "0" && s <= "9") {
        x = x * 10 + s - "0";
        s = getchar();
    }
    x *= f;
}


cin.getcout.putgetcharputchar的用法類似,只不過是C++當(dāng)中的特性。大家可以參考一下下面這個例子,就不過多贅述了。

char c;
cin.get(c);
cout.put(c);

 

3、輸入輸出中文

關(guān)于這一段我猶豫了很久要不要加,因為實在是沒有相關(guān)經(jīng)驗,畢竟之前只刷題了。糾結(jié)了很久還是決定寫上,因為這個問題對于不少同學(xué)應(yīng)該挺重要的,尤其是想要做C++工程的同學(xué)。本人水平有限,勉強整理了一下各方資料,如有錯誤,歡迎指出~

其實直接在C++當(dāng)中是可以直接輸出中文的,這并不會有什么問題。

比如下列代碼,是可以完美運行的:

string str;
cin >> str;
cout << str << endl;
cout << str.length() << endl;


C++char類型和輸入輸出優(yōu)化

只是為什么最后輸出的長度是6?因為我是在Mac上跑的這段代碼。在Mac當(dāng)中默認(rèn)使用utf-8編碼,一個漢字的長度是3個字節(jié)。C++當(dāng)中的字符串計算長度的時候統(tǒng)計的是字節(jié)的數(shù)量,所以兩個漢字的長度是6。

如果我們是在源代碼當(dāng)中寫入了中文,比如:

string str = "中文";
cout << str << endl;


這就可能一些問題,最常見的問題就是代碼存儲環(huán)境和運行環(huán)境的默認(rèn)編碼不同,比如IDE當(dāng)中默認(rèn)是utf-8編碼,但是終端默認(rèn)是gbk編碼(windows系統(tǒng)常見)。這就會導(dǎo)致輸出的結(jié)果是亂碼。

解決方案是我們可以使用wchar_t,wchar_tchar的寬類型版本,它占據(jù)兩個字節(jié)。可以用來存儲unicode編碼的字符:

const wchar_t* str = L"中文";


我們在中文兩個字之前加上了L修飾符,它告訴編譯器,這是一個寬字符,我們需要編譯器根據(jù)locale來進行翻譯。

locale是指根據(jù)計算機用戶使用的語言、所在的國家或地區(qū)以及文化傳統(tǒng)而定義的軟件運行時的語言環(huán)境。可以將locale理解為一系列環(huán)境變量。locale環(huán)境變量值的格式為language_area.charset。languag表示語言,例如英語或中文;area表示使用該語言的地區(qū),例如美國或者中國大陸;charset表示字符集編碼,例如UTF-8或者GBK

這些環(huán)境變量會對日期格式,數(shù)字格式,貨幣格式,字符處理等多個方面產(chǎn)生影響。在Linux系統(tǒng)下打開Terminal,輸入locale命令,就可查看當(dāng)前系統(tǒng)使用的語言環(huán)境。

C++char類型和輸入輸出優(yōu)化

locale的結(jié)果包含12類,我在網(wǎng)上也找到了表格:

C++char類型和輸入輸出優(yōu)化

LANG指的是未設(shè)置的默認(rèn)值,大部分程序應(yīng)用LANGUAGE指定的語言作為界面語言。LC_ALL同時設(shè)置所有的內(nèi)容,并且其優(yōu)先級比每個內(nèi)容單獨設(shè)置的優(yōu)先級都高,而LANG的優(yōu)先級最低。

cincout可以看成是針對char的流,所以不適合應(yīng)用在wchar_t類型的處理上。與之對應(yīng)我們應(yīng)該使用wcin和wcout。而wcout默認(rèn)采用的是C local,并不認(rèn)識中文,所以我們要先對wcoutlocal進行設(shè)置。將其設(shè)置成和運行環(huán)境的local一致。

大約有以下幾種設(shè)置方法:

#include <codecvt>
const wchar_t* str = L"中文";

// 使用默認(rèn)local
locale loc("");
wcout.imbue(loc);

// 使用local命令顯示的結(jié)果
locale loc("en_US.UTF-8");
wcout.imbue(loc);

// 使用標(biāo)準(zhǔn)facet
locale utf8(locale(), new codecvt_utf8_utf16<wchar_t> );
wcout.imbue(utf8);

// 使用系統(tǒng)local
locale sys_loc("");
wcout.imbue(sys_loc);

wcout << str << endl;
cout << wcslen(str) << endl;

我們可以使用wcslen來計算寬字節(jié)字符串的長度,它輸出的結(jié)果是2,而不是6。

C++當(dāng)中的編碼設(shè)置是一個很大的問題,因為在刷題當(dāng)中幾乎不會遇到,我們這里也只是做一個淺嘗輒止的討論。大家如果有需要,可自行深入研究。

到此這篇關(guān)于C++char類型和輸入輸出優(yōu)化的文章就介紹到這了,更多相關(guān)C++char類型和輸入輸出優(yōu)化內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

注:文章轉(zhuǎn)自微信公眾號:Coder梁(ID:Coder_LT)

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細(xì)的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現(xiàn)電腦關(guān)機程序

    C語言實現(xiàn)電腦關(guān)機程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)電腦關(guān)機程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當(dāng)程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩视频免费在线观看 | 久久精品亚洲国产 | 日本中文字幕一区 | 美日韩一区 | 久久一二 | 欧美成人a | 五月天综合网 | 精品视频一区二区 | 日韩中文字幕视频在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲激情在线视频 | 91久久九色 | 日本高清不卡视频 | 亚洲一区国产视频 | 婷婷在线视频 | 国外精品视频在线观看 | 国产精品亚洲第一区在线暖暖韩国 | 国产精品1 | 亚洲精品日韩在线 | 成人国产在线视频 | 久久99视频精品 | 日韩在线一区二区三区 | 日韩欧美一区二区中文字幕 | 久久尤物免费一区二区三区 | 亚洲视频在线看 | 亚洲毛片一区二区 | 免费嗨片网 | 黄色毛片a| 91精品国产综合久久久久久丝袜 | 国产精品成人3p一区二区三区 | 日韩免费| 一级在线看 | 亚色图 | 亚洲一区二区在线 | 国产精品日韩高清伦字幕搜索 | 日韩一区二区三区在线视频 | 国产精品久久久久aaaa | 久久亚洲一区二区三区明星换脸 | 天天看天天爽 | 日本在线视频一区二区 | 国产精品亚洲一区 |