c 中的int與char之間轉換問題

2021-10-05 18:24:54 字數 1356 閱讀 7742

在平時的acm中很容易見到資料型別需要在數字和字元之間轉換的問題,我以乙個簡單的程式設計題來說一下這個問題。

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10​100​​。

在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。

1234567890987654321123456789
yi san wu
思路:

我們知道加入我們以乙個string型別儲存這個數,這個「數字」的每一位就好拿出來,進行累加。然後再將累加的數每一位拆開,讓它按照對應的拼音輸出即可。

可能遇到的問題:首先,以string型別儲存數字後,每一位上儲存的是乙個字元而不是數字,所以如果直接使用『+』會產生錯誤(但編譯時候不會報錯);其次,累加之後資料型別應該是乙個int型的,按照我們的思路,對應拼音輸出的時候應該是字元。

關鍵點:

涉及到了兩次型別轉換。一次是在計算各位之和的時候,一次是在對應拼音輸出結果的時候。

#include#include#includeusing namespace std;

void judge(char num)

}int main(){

string n;

stringstream ss;

cin >> n;

int sum=0;

for(int i=0;i具體的演算法實現很簡單,主要說一下在這個過程中用到的兩種轉化方法。

用到了ascii碼。(ascii表我就不列了,網上有很多。)簡單來說就是:char型的要轉換成int型的,ascii碼差了乙個『0』的距離。

eg:char型轉化成int

char s=『1234』;

int a;

a = s - '0';//這就是實現了char型向int轉化;

int 轉化成char:

int a = 123445;

char s;

s = a+'0';

用包含在sstream庫中的stringstream。簡單來說stringstream的作用就是它吃進去乙個型別,然後給你吐出來另乙個你想要的型別。

stringstream ss;

int a = 1234;

ss << a;

string s = ss.str(); //s此時就是乙個字串型別的了;

關於這個題的解法肯定還有更簡單的,這裡不過多研究,主要是為了簡單說明一下這兩個型別之間的轉化問題。

C 中char和int轉換

1 整數轉化字串 sprintf 在標頭檔案 include中 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 轉換字元 印出百分比符號,不轉換。c 整數轉成對應的 ascii 字元。d 整數轉成十進位。f 倍精確度數字轉成浮點數。o ...

C 中int與char相互轉換

了解int與char相互轉換之前,先讓我們看一下ascii碼表。其中數字字元對應的位置為 48 57。char轉int之前,先將表示式中的每個字元都轉換成ascii碼值,再進行計算。以下 為例,其中i3的結果符合我們的預期要求。char c 0 int i1 c 48 int i2 c 0 48 i...

C 中char 與string之間的轉換

string 轉換成 char string ss abcdefg char cc ss.tochararray char 轉換成string string s new string cc 此外,byte 與 string 之間的裝換 byte bb encoding.utf8.getbytes s...