Перевод кода с Pascal на C++
Помогите, пожалуйста, перевести код с паскаля на с++
program Param43;
type
St=String;
SArray= array [1..10] of string;
var
S:St;
i,N:integer;
W:SArray;
function DeCompressStr(S:St):St;
var
i,i2,Num,error:integer;
Stemp,SNum:String;
C:Char;
begin
i:=0;
Result:='';
While i<=length(s) do
begin
inc(i);
C:=S[i];
if (i=length(S)) or (S[i+1]<>'{') then Num:=1
else
begin
inc(i,2);
SNum:='';
while S[i]<>'}' do
begin
SNum:=SNum+S[i];
inc(i);
end;
val(SNum,Num,error);
end;
for i2:=1 to Num do result:=result+C;
end;
end;
begin
for i:=1 to 5 do
begin
Write('S:');
Readln(S);
Writeln(DeCompressStr(S));
end;
end.
Может, существуют какие-то конвертеры перевода кода? Буду благодарна, если подскажете
Ответы (1 шт):
Насчёт автоперевода не знаю, а вот на C++14 могу перевести, например, так, как в примере ниже.
(Х.з. насчёт корректности - логику не проверял; точно не помню насчёт индексов - ведётся ли в pascal счёт с единицы или с нуля (в C/C++ и большинстве современных ЯП индексация ведётся с нуля); на опечатки не проверял - можете считать мою версию "машинным переводом", т.к. по максимуму пытался сохранить внешнее сходство с исходным кодом на паскале; жалобы и критика не принимаются; данный код можете использовать только на свой страх и риск, за возможный ущерб оборудованию, репутации, Вашей чуткой и ранимой психике, а равно и иной ущерб, связанный с данным кодом прямо или косвенно, ответственность несёте только Вы, а не я - если это не устраивает - просто не используйте данный код).
#define _CRT_NONSTDC_NO_DEPRECATE // Чтобы MS Visual Studio заткнулась и не
#define _CRT_SECURE_NO_WARNINGS // цеплялась к использованию atoi.
#define _CRT_SECURE_NO_DEPRECATE // (При желании, можно вместо atoi использовать std::from_chars в С++17)
#include <iostream>
#include <string>
#include <array>
#include <stdlib.h>
class Param43 {
//type
using St = std::string;
using SArray = std::array<std::string, 10>;
//var
St S;
int i, N;
SArray W;
public:
St DeCompressStr(const St& s) {
//var
int i,i2,Num,error;
St Stemp,SNum;
char c;
//begin
i=0;
St Result='';//Паскаль возвращает через неё переменные, в нём нет return
while (i<=s.size()) {
++i;
c = s[i];
if (i==s.size()) || (s[i+1]!='{') Num=1;
else {
i+=2;
SNum='';
while (s[i]!='}'){
SNum=SNum+s[i];
++i;
}
Num = atoi(SNum.c_str());
}
for (i2=1; i2 <= Num; ++i2) Result=Result+C;
}
return Result;
}
void run() {
for (i=1; i<=5; ++i) {
std::cout<<"S:";
std::getline(std::cin, S);
std::string decompressed = DeCompressStr(S);
std::cout<<decompressed<<'\n';
}
}
};
Param43 program;
int main(int argc, char argv[]){
program.run();
return 0;
}