2015-06-22 283 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;