2015-06-22 464 views
1

我試圖將字符數組轉換爲整數字符串,並將相應的字符轉換爲字母順序。 例如:A(A)= 0,Z(Z)= 25在C++中將字符數組轉換爲整數字符串

string key_char = argv[1]; 
string key_num; 


    for (int i = 0; i < key_char.length(); i++){ 
     if (isalpha(key_char[i])){ 
      if (islower(key_char[i])){ 
       key_num[i] = int(key_char[i] - 97); //97 is the ascii value for 'a' 
      } 
      else{ 
       key_num[i] = int(key_char[i] - 65); // 65 is the ascii value for 'A' 
      } 

     cout << key_num << endl; 

     } 

我的想法是,以創建兩個字符串,key_char是用於存儲從在字符的用戶的命令行輸入。 key_num是在翻譯後存儲整數字符串。我正在考慮迭代循環,並通過轉換將每個字符從字符數組轉換爲整數字符串。我沒有收到任何編譯錯誤,也沒有返回任何內容。請讓我知道鑄造的想法在這種情況下是否可行,或者是否有更好的解決方案。非常感謝你!

+0

你想要一個'int'或'char's序列嗎? –

+0

您需要一個單獨的索引變量來寫入key_num,例如key_num [j ++],否則你將在key_num中有空的空間,其中isalpha(key_char [i])是假的 – samgak

+0

嗨,我想要一個int序列。例如,如果用戶輸入「abz」,我希望我的輸出字符串爲「0125」 –

回答

3

如果你想要一個int的序列,然後使用vector<int>。使用key_char字符串,其中的字符值將作爲整數的初始值。

std::vector<int> key_num(key_char.begin(), key_char.end()); 

然後,迭代的key_num每一個字符,並將其轉換爲等效int

for (auto&& n : key_num) { 
    n = std::toupper(n) - 'A'; 
} 

,或者如果您在預C++ 11

for (std::vector<int>::iterator it = key_num.begin(), end = key_num.end(); 
     it != end; 
     ++it) { 
    *it = std::toupper(*it) - 'A'; 
} 

是後你可以打印整套

for (auto i : key_num) { 
    std::cout << i; 
} 

您需要爲此解決方案提供#include <cctype>#include <vector>

你目前的做法很奇怪,最大的問題是你開始的key_num是一個空字符串,所以你不能真正分配它,而不用擔心崩潰。

+0

我是編程新手,你所介紹的概念對我來說有點太高級了。我一定會學習矢量如何工作,非常感謝! –

+0

矢量是一個可以增長的序列。這裏的四個循環在C++中被稱爲基於範圍的for循環,但在其他語言中被更普遍地稱爲for-each循環。這個想法只是說「對some_sequence中的每個元素」而不是一個只計數的循環 –

+0

謝謝瑞恩!這意味着很多! –

2

您可以直接使用文字'a','A',因爲它們是整數。此外,key_char[i] - 'a'將評估爲一個整數,所以不需要投射。

如果你想要的是打印出你不需要額外的array.In循環使用

cout << (islower(key_char[i]) ? key_char[i] - 'a' : key_char[i] -'A') 

然後

cout << std::endl 
循環後

2

你可以使用一個std::ostringstream構造輸出字符串。

#include <sstream> 
std::ostringstream strm; 
for (int i = 0; i < key_char.length(); i++){ 
    if (isalpha(key_char[i])){ 
     if (islower(key_char[i])){ 
      strm << int(key_char[i] - 'a'); 
     } 
     else{ 
      strm << int(key_char[i] - 'A'); 
     } 
    } 
} 
key_num = strm.str(); 
std::cout << key_num << std::endl;