Перевод кода с 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 шт):

Автор решения: VladimirS

Насчёт автоперевода не знаю, а вот на 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;
}
→ Ссылка