在C++中将字符数组转换为整数字符串
我试图将字符数组转换为整数字符串,并将相应的字符转换为字母顺序。 例如: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是在翻译后存储整数字符串。我正在考虑迭代循环,并通过转换将每个字符从字符数组转换为整数字符串。我没有收到任何编译错误,也没有返回任何内容。请让我知道铸造的想法在这种情况下是否可行,或者是否有更好的解决方案。非常感谢你!
如果你想要一个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
是一个空字符串,所以你不能真正分配它,而不用担心崩溃。
我是编程新手,你所介绍的概念对我来说有点太高级了。我一定会学习矢量如何工作,非常感谢! –
矢量是一个可以增长的序列。这里的四个循环在C++中被称为基于范围的for循环,但在其他语言中被更普遍地称为for-each循环。这个想法只是说“对some_sequence中的每个元素”而不是一个只计数的循环 –
谢谢瑞恩!这意味着很多! –
您可以直接使用文字'a','A',因为它们是整数。此外,key_char[i] - 'a'
将评估为一个整数,所以不需要投射。
如果你想要的是打印出你不需要额外的array.In循环使用
cout << (islower(key_char[i]) ? key_char[i] - 'a' : key_char[i] -'A')
然后
cout << std::endl
循环后
你可以使用一个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;
你想要一个'int'或'char's序列吗? –
您需要一个单独的索引变量来写入key_num,例如key_num [j ++],否则你将在key_num中有空的空间,其中isalpha(key_char [i])是假的 – samgak
嗨,我想要一个int序列。例如,如果用户输入“abz”,我希望我的输出字符串为“0125” –