将字符数组计算为ASCII值最简单的方法是什么,如果它包含数字值,则将它们转换为char
并显示为char
数组,而不是值?这样的输入可以是1003297
,输出将是d a
。最简单,最简单的方法是什么?
实际上,我正在尝试解决UVa problem 444 - Encoder Decoder。我已经完成了一半。但是问题是我无法将任何输入的int
数字转换为char
数组。
我设法将字符转换为它们的ASCII值并反转每个ASCII值,并通过反转整个数组来显示它,反之亦然,我在这里呆了三天并继续搜索。我正在使用输入char
数组,因此如果我使用数字值,它也将被当作字符,但是我需要将所有数字值存储到int
数组中,并假设所有这些数字都是ASCII值,我需要通过char
数组显示该int
数组的char
值。还有一点,时间限制是3
秒。我知道它很大,但是我需要最简单的方法来做到这一点。
这是我不完整的解决方案:
#include <iostream>
#include <cstring>
#include <string.h>
#include <cstdlib>
using namespace std;
int main()
{
char str [80];
int arr [80];
char intStr[80];
int b;
string a, finale;
cout << "Your String : ";
cin.getline( str, 80, '\n' );
for(int i = 0; i < strlen(str); i++)
{
if(str[0] < 48 || str[0] > 57 || str[i] == 32 && str[i] != 13 )
{
arr[i] = str[i];
b = i;
}
else if(str[0] > 48 && str[0] < 57)
{
arr[i] = str[i];
b = i;
goto encode;
}
}
decode:
for(int j = b; j >= 0; j--)
{
itoa(arr[j], intStr, 10);
a = a + strrev(intStr);
}
cout << a;
encode:
for(int j = b; j > 0; j--)
{
//itoa(arr[j], intStr, 10);
atoi(arr[j]);
a = a + strrev(intStr);
}
cout << a;
return 0;
}
答案 0 :(得分:0)
它肯定可以变得更简单...
首先,应将C ++中原始字符数组的使用保留给低级操作。在这里,您只是在处理输入字符串,因此它应该是普通的std::string
。
然后正确的方法是累积输入的十进制数字,直到达到可接受的ascii码为止,当得到十进制数字时,将其添加到输出字符串的末尾。
最后,一次构建一个字符的字符串效率低下:您应该首先将所有内容收集到std::vector
中,然后最后才构建字符串。代码可能很简单:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string line; // input line
vector<char> out; // gather converted characters
char res = 0; // to compute the ascii values
std::getline(cin, line);
for (char c: line) {
if (c >= '0' && c <= '9') { // only process decimal digits
res = 10 * res + (c - '0');
if (res >= ' ') { // Ok, we have a valid ASCII code
out.push_back(res);
res = 0;
}
}
else if (res != 0) { // assume that non numeric act as separators
out.push_back(res); // whatever the input value (allows control chars)
res = 0;
}
}
string a(out.begin(), out.end()); // build a string from the vector
cout << a << endl;
return 0;
}