2014-02-17 37 views
0

問題已解決:謝謝大家!將字母轉換爲C++中的數字

我對C++幾乎是全新的,所以如果這個問題看起來微不足道,我會提前道歉。

我試圖將一串字母轉換爲一組2位數字,其中a = 10,b = 11,...,Y = 34,Z = 35,以便(例如)「abc def」去「101112131415」。我會如何去做這件事?任何幫助真的會被讚賞。另外,我不介意大小寫是否會導致相同的數字或不同的數字。非常感謝你提前。我可能不會需要幾天,但如果有人感覺特別好,我將如何去扭轉這個過程?即「101112131415」 - >「abcdef」謝謝。

編輯:這不是家庭作業,我完全自學。我已經用不同的語言完成了這個項目,並決定嘗試使用C++來比較差異,並嘗試在這個過程中學習C++ :)

編輯:我大概是我想要的,我只需要一點幫助將其轉換爲適用於字符串,謝謝你們。

#include <iostream> 
#include <sstream> 
#include <string> 

int returnVal (char x) 
{ 
    return (int) x - 87; 
} 

int main() 
{ 
    char x = 'g'; 
    std::cout << returnVal(x); 
} 
+4

看起來像我的家庭作業....試試看,並告訴我們你的進步,所以我們可以幫助你,當你卡住:) – Netwave

+1

第一步可能是看看'z'的值 - 'a 「'。 – molbdnilo

+0

「123」= 1 * 100 + 2 * 10 + 3 * 1 – David

回答

1

每個字符都有它的ASCII值。嘗試將您的字符轉換爲ASCII碼,然後處理差異。

實施例:

int x = 'a'; 
cout << x; 

將打印97;和

int x = 'a'; 
cout << x - 87; 

將打印10

因此,您可以編寫一個函數是這樣的:

int returnVal(char x) 
{ 
    return (int)x - 87; 
} 

,以獲得所需的輸出。

而且你的主程序可能看起來像:

int main() 
{ 
    string s = "abcdef" 
    for (unsigned int i = 0; i < s.length(); i++) 
    { 
     cout << returnVal(s[i]); 
    } 
    return 0; 
} 
+0

非常感謝,我現在正在努力處理字符串部分。 – Michael

+0

非常感謝,只有一兩個語法錯誤是問題所在,非常感謝! – Michael

0

丹尼爾說了什麼,自己嘗試一下。

作爲一個起點,雖然,鑄造:

int i = (int)string[0] + offset; 

將讓你你的電話號碼,從性格,和:stringstream將是有用的。

0

我怎麼會去這樣做呢?

通過嘗試做一些第一,並尋求幫助,只有當你覺得你不能前進。

話雖這麼說,我想到的最明顯的解決方案是基於一個事實,即字符(即'a''G')是真正的數字。假設你有以下幾點:

char c = 'a'; 

你可以做與c相關的數字:

int n = static_cast<int>(c); 

然後,添加一些偏移到 'N':

n += 10; 

.. 。並將其投回到char

c = static_cast<char>(n); 

注:以上假定字符是連續的,即對應於'a'的數字等於對應於'z'的數字減去兩者之間的字母數量。不過,這通常是成立的。

0

這可以工作

int Number = 123; // number to be converted to a string

string Result; // string which will contain the result

ostringstream convert; // stream used for the conversion

convert << Number; // insert the textual representation of 'Number' in the characters in the stream

Result = convert.str(); // set 'Result' to the contents of the stream

您應該添加此標頭 #include <sstream> #include <string>

1

一種便攜式的方法是使用一個查找表:

const unsigned int letter_to_value[] = 
{10, 11, 12, /*...*/, 35}; 

// ... 

letter = toupper(letter); 
const unsigned int index = letter - 'A'; 
value = letter_to_value[index]; 
cout << index; 
0

許多答案會告訴你,字符在ASCII編碼,就可以轉換了一封信索引減去'a'

這是不正確的C++。當你的程序要求包含一個ASCII正在使用的規範時,這是可以接受的。但是,C++標準本身並不需要這個。有其他字符集的C++實現。

在沒有知識的人,ASCII正在使用中,您可以使用轉換表:通過在表中查找起來

#include <limits.h> 

// Define a table to translate from characters to desired codes: 
static unsigned int Translate[UCHAR_MAX] = 
{ 
    ['a'] = 10, 
    ['b'] = 11, 
    … 
}; 

然後你可以轉換的字符爲數字:

unsigned char x = something; 

int result = Translate[x]; 

翻譯完成後,您可以使用printf("%02d", result);將其打印爲兩位數字。

在另一個方向上翻譯需要讀取兩個字符,將它們轉換爲數字(將它們解釋爲十進制)並執行類似的轉換。您可能會爲此反向翻譯設置不同的翻譯表。

相關問題