Какой самый простой способ подсчитать массив символов как значения 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;
}
Конечно, это можно сделать проще …
Во-первых, использование необработанных символьных массивов в 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;
}
Других решений пока нет …