Ваш вопрос неоднозначен в том смысле, что без каких-либо предположений входная строка может привести к экспоненциальному количеству строк вывода, которые удовлетворяют всем ограничениям.
Мы делаем предположение, что с ASCII вы имеете в виду читаемые (не управляющие части) ascii. Таким образом, любое действительное значение ascii находится между 32
и 128
. В результате вы знаете, что если первые два символа представляют значение, строго меньше 32
, оно будет в диапазоне 100+
.
Ваш алгоритм должен делать две вещи одновременно:
- Считать первые два символа.
- Если значение меньше
32
, тогда значение находится в диапазоне 100+
, поэтому прочитайте три символа и конвертируйте, если не в диапазоне -100
, су конвертируйте два символа.
Или в PHP:
$s = "495051979899100";
$n = strlen($s);
$result = "";
for ($x=0; $x<=$n; $x += 2) {
$temp = intval(substr($s,$x,2));
if($temp < 32) {
$temp = intval(substr($s,$x,3));
if($temp > 128) {
die "Assumption error";
}
$x++;
}
$result .= chr($temp);
}
echo $result;
Я предполагаю, что это будет двухэтапный процесс. Сначала преобразуйте десятичную строку в шестнадцатеричную, а затем начните вытягивать по 2 символа за раз и преобразуйте их в эквивалент символов. – Erik
Как вы можете узнать, есть ли 4 цифры - комбинация 3/1, 2/2 или 1/3? –
Я думаю, что первая проблема - это неоднозначность. Как вы подразделяете '456' на' 45' и '6' или' 4' и '56'. –