C ++-将ASCII字符数组中可能的数值转换为字符的最简单方法

时间:2018-07-31 13:54:58

标签: c++ arrays uva

将字符数组计算为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;
}

1 个答案:

答案 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;

}