Тема: Переклад з Pascal на С++
Усім доброго часу доби!
Попросили перевести з Паскалю на C++ наступну програму(вона має дописувати мінімальну к-сть символів в кінець стрічки аби та стала паліндромом, якщо це потрібно) :
var s:array[1..2000] of char; tn,i,j,n:integer; chetn,flag:boolean; begin i:=0; flag := false; writeln('Введите строку'); repeat i:=i+1; read(s[i]); until s[i]=#13; n:=i-1; for i:=n div 2 + 1 to n do begin for j:=1 to n-i do if s[i+j]<>s[i-j] then break; if (i=n-1) and (s[i+j]<>s[i-j]) then begin flag := true; break; end; if (j=n-i) and (s[i+j]=s[i-j]) then break; end; if(flag=true)then begin i:=n; flag:=false; end; tn:=i; for i:=(n+1) div 2 + 1 to n do begin for j:=1 to n-i+1 do if s[i-j]<>s[i+j-1] then break; if (i=n) and (s[i-j]<>s[i+j-1]) then begin flag:=true; break; end; if (j=n-i+1) and (s[i-j]=s[i+j-1]) then break; end; if(flag=true)then i:=n+1; if 2*i-n-2<2*tn-n-1 then begin chetn:=true; tn:=i end else chetn:=false; if chetn=false then begin writeln(2*tn-n-1); for i:=1 to 2*tn-n-1 do s[n+i]:=s[2*tn-n-i]; n:=2*tn-1; end; if chetn=true then begin writeln(2*tn-n-2); for i:=1 to 2*tn-n-2 do s[n+i]:=s[2*tn-n-1-i]; n:=2*tn-2; end; for i:=1 to n do write(s[i]); writeln; readln; end.
Доречі Паскальний код працює чудово!) Можливо, комусь пригодиться.
Мій варіант перекладу наступний:
#include <iostream> #include <string> using namespace std; int main() { string str; bool flag; cout << "Enter string : "; cin >> str; int length = str.length(); int i, j, tn; for (i = (length-1) / 2 + 1; i < length; i++) { for (j = 0; j < length - i-1; j++) { if (str[i + j-1] != str[i - j-1]) break; } if (i == length - 2 && (str[i + j-1] != str[i - j-1])) { i = length-1; break; } if (j == length - i-1 && (str[i + j-1] == str[i - j-1])) break; } tn = i; for (i = (length) / 2 + 1; i < length; i++) { for (j = 0; j < length - i-1; j++) if (str[i - j - 1] != str[i + j - 2]) break; if (i == length && (str[i - j-1] != str[i + j - 2])) { i = length; break; } if (j == length - i + 1 && (str[i + j-1] == str[i - j-2])) break; } if ((2 * i - length -2) < (2 * tn - length-1)) { flag = true; tn = i; } else flag = false; if (flag == false) { for (i = 0; i < 2 * tn - length; i++) str.push_back(str[2 * tn - length - i-1]); } if (flag == true) { for (i = 0; i < 2 * tn - length - 1; i++) str.push_back(str[2 * tn - length - i- 2]); } cout << "Result : " << str << endl; return 0; }
Так от, мій код(той що на C++) не працює належним чином.
Мабуть, я десь помилився в індексації або що.
Шукаю помилку сам вже десь 4ту годину і голова пухне, бо не розумію де проблема.
Можливо хтось щось помітить - буду дуже вдячний за допомогу.