Самый простой способ преобразовать возможные числовые значения в массиве символов ASCII в символы

Какой самый простой способ подсчитать массив символов как значения ASCII и, если он содержит числовые значения, преобразовать их в char и показать их как char массив, а не значения? Такой вклад может быть 1003297 выход будет d a, какой самый простой и легкий способ сделать это?

На самом деле, я пытаюсь решить UVA проблема 444 — Кодер-декодер. Я сделал половину этого. Но проблема в том, что я не могу преобразовать 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

Решение

Конечно, это можно сделать проще …

Во-первых, использование необработанных символьных массивов в 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;

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]