Перенос кода с С++ на С# (Машина Тюринга) - C#
Формулировка задачи:
Добрый день. Прошу помощи знающих людей
Взялся переносить простенький код Машины Тюринга с С++ на С#
Но, столкнулся с некими сложностями.
Например:
Вот код мой на С#:
Буду благодарен за помощь!
- Не знаю аналог функции "stoi" в С#.
- Столкнулся с такой проблемой (скриншот прикрепил)
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int unconvert(string f){
int n=0,i=0;
for (int i = 0; i < f.length(); i++){
if (f[i] == '1') n++;
}
return n;
}
string convert(int num){
string res;
while (num--,num >= 0){
res += '1';
}
return res;
}
string convert(string f){
string s_num, res;
int num,i= 0;
while ( i < f.length()) {
if ((f[i] =='+') || (f[i] == '-')){
num = stoi(s_num);
res += convert(num);
res+=f[i];
s_num = "";
i++;
}
s_num += f[i];
i++;
}
num = stoi(s_num);
res += convert(num);
return res;
};
void q1(string &fun, int &i);
void q2(string &fun, int &i);
void q3(string &fun, int &i);
void q4(string &fun, int &i);
void q5(string &fun, int &i);
void q6(string &fun, int &i);
void q7(string &fun, int &i);
void q8(string &fun, int &i);
void q9(string &fun, int &i);
void q10(string &fun, int &i);
int _tmain(int argc,
_TCHAR* argv[])
{
int num,i = 0;
string fun,f,operation;
cout<< "Input function: ";
cin>>f;
fun = convert(f);
cout<<fun<<endl;
q1(fun,i);
cout<<"Result = "<<fun<<endl<<"Result(10) = "<<unconvert(fun)<<endl;
system("pause");
return 0;
}
void q1(string &fun, int &i){
if (fun[i] == '+'){
q6(fun,i);
return;
}
else if (fun[i] == '-'){
q7(fun,i);
return;
}
else if (i >= fun.length()){
return;
}
i++;
q1(fun,i);
};
void q2(string &fun, int &i){
i--;
if (fun[i] == '1') {
i++;
q9(fun,i);
return;
}
q2(fun,i);
};
void q3(string &fun, int &i){
i++;
if (fun[i] == '1'){
fun[i] = ' ';
cout<<fun<<endl;
q2(fun,i);
return;
}
else if (fun[i] == '+'){
q6(fun,i);
return;
}
else if (fun[i] == '-'){
q7(fun,i);
return;
}
else if (i >= fun.length()){
return;
}
q3(fun,i);
};
void q4(string &fun, int &i){
i--;
if (fun[i] == '1') {
fun[i] = ' ';
cout<<fun<<endl;
q5(fun,i);
return;
}
q4(fun,i);
};
void q5(string &fun, int &i){
i++;
if (fun[i] == '1'){
fun[i] = ' ';
cout<<fun<<endl;
q4(fun,i);
return;
}
else if (fun[i] == '+'){
q6(fun,i);
return;
}
else if (fun[i] == '-'){
q7(fun,i);
return;
}
else if (i >= fun.length()){
return;
}
q5(fun,i);
};
void q6(string &fun, int &i){
fun[i] = ' ';
i++;
q10(fun,i);
};
void q7(string &fun, int &i){
fun[i] = ' ';
i++;
q8(fun,i);
};
void q8(string &fun, int &i){
fun[i] =' ';
cout<<fun<<endl;
q4(fun,i);
}
void q9(string &fun, int &i){
fun[i] = '1';
cout<<fun<<endl;
q3(fun,i);
}
void q10(string &fun, int &i){
fun[i] = ' ';
cout<<fun<<endl;
q2(fun,i);
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication35
{
class Program
{
static void Main(string[] args)
{
int num, i = 0;
string fun, operation;
Console.WriteLine("Input function: ");
string f = Console.ReadLine();
fun = convert(f);
Console.WriteLine(fun);
q1(ref fun, ref i);
Console.WriteLine("Resulte = " + fun);
Console.WriteLine("Resulte(10) = " + unconverte(fun));
}
int unconvert(string f)
{
int n = 0,i=0;
for (i = 0; i < f.Length; i++)
{
if (f[i] == '1') n++;
}
return n;
}
string convert(int num){
string res=null;
while (num >= 0){
res+='1';
num--;
}
return res;
}
string convert(string f){
string s_num, res;
int num,i= 0;
while ( i < f.Length) {
if ((f[i] =='+') || (f[i] == '-')){
num = stoi(s_num);
res += convert(num);
res+=f[i];
s_num = "";
i++;
}
s_num += f[i];
i++;
}
num = stoi(s_num);
res += convert(num);
return res;
}
void q1(ref string fun, ref int i){
if (fun[i] == '+'){
q6(ref fun, ref i);
return;
}
else if (fun[i] == '-'){
q7(ref fun, ref i);
return;
}
else if (i >= fun.Length){
return;
}
i++;
q1(ref fun, ref i);
}
void q2(ref string fun, ref int i){
i--;
if (fun[i] == '1') {
i++;
q9(ref fun, ref i);
return;
}
q2(ref fun, ref i);
}
void q3(ref string fun, ref int i){
i++;
if (fun[i] == '1'){
fun[i] = ' ';
Console.WriteLine(fun);
q2(ref fun, ref i);
return;
}
else if (fun[i] == '+'){
q6(ref fun, ref i);
return;
}
else if (fun[i] == '-'){
q7(ref fun, ref i);
return;
}
else if (i >= fun.Length){
return;
}
q3(ref fun, ref i);
}
void q4(ref string fun, ref int i){
i--;
if (fun[i] == '1') {
fun[i] = ' ';
Console.WriteLine(fun);
q5(ref fun, ref i);
return;
}
q4(ref fun, ref i);
}
void q5(ref string fun, ref int i){
i++;
if (fun[i] == '1'){
fun[i] = ' ';
Console.WriteLine(fun);
q4(ref fun, ref i);
return;
}
else if (fun[i] == '+'){
q6(ref fun, ref i);
return;
}
else if (fun[i] == '-'){
q7(ref fun, ref i);
return;
}
else if (i >= fun.Length){
return;
}
q5(ref fun, ref i);
}
void q6(ref string fun, ref int i){
fun[i] = ' ';
i++;
q10(ref fun, ref i);
}
void q7(ref string fun, ref int i){
fun[i] = ' ';
i++;
q8(ref fun, ref i);
}
void q8(ref string fun, ref int i){
fun[i] =' ';
Console.WriteLine(fun);
q4(ref fun, ref i);
}
void q9(ref string fun, ref int i){
fun[i] = '1';
Console.WriteLine(fun);
q3(ref fun, ref i);
}
void q10(ref string fun, ref int i){
fun[i] = ' ';
Console.WriteLine(fun);
q2(ref fun, ref i);
}
}
}Решение задачи: «Перенос кода с С++ на С# (Машина Тюринга)»
textual
Листинг программы
var symbols = fun.ToCharArray(); if(fun[i]=='1') symbols[i]=' '; fun = new string(symbols);