我试图将字符数组转换为整数字符串,并将相应字符转换为字母顺序。 例如:A(a)= 0,Z(z)= 25。
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 :(得分: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';
}
或者你是否在pre-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
是一个空字符串,所以你不能真正分配它而不用担心崩溃。
答案 1 :(得分:2)
你可以直接使用文字'a','A',因为它们是整数。此外,key_char[i] - 'a'
将计算为整数,因此不需要强制转换。
如果您想要打印出来,则不需要额外的数组。在循环中使用
cout << (islower(key_char[i]) ? key_char[i] - 'a' : key_char[i] -'A')
然后
cout << std::endl
循环之后
答案 2 :(得分: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;