Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 21:31   #1
Gladiator1922
 
Регистрация: 29.03.2012
Сообщений: 6
По умолчанию Программа на C++ Builder

Есть программа на C++ Builder, надо переписать ее в C#. Проблема в следующем. Вот часть кода в С++
Код:
int Pos(String S,String s,int i)
{
   int N,n,j=i;
 //  int n;
   bool b=false;
   bool c=true;
   if(j==1)n=0;
   else
   n=1;


   while((!b)&&(j<S.Length()))
   {
     if((S[j]==s[1])&&((Trim(S[j-n])=="")||(Trim(S[j-n])==",")||(n==0)))
     {
       int k=1;
       c=true;
       while((c)&&(k<=s.Length())&&(j+k-1<=S.Length()))
       {
         if(S[j+k-1]!=s[k])c=false;
         N=j+k;k+=1;
       };
       j=j+k-1;
       if((c)&&(k==s.Length()+1)&&(j<=S.Length()))
       if((Trim(S[N])=="")||(Trim(S[N])==","))

        b=true;
       if((c)&&(k==s.Length()+1)&&(j>S.Length()))
         b=true;
     }

     else {j+=1;n=1;};
   };
   if(b)return j; else
       return 0;
};
Далее Pos используется
Код:
bool TBlackboard ::SentEnd(int k)
{

   String S="";
   int i=0,j;

     if(k<L)
     {
        if(Str[k+1]=='(')
            bracket+=1;
        if(Str[k+1]==')')
            bracket-=1;
     };

   if((Str[k]=='!')||(Str[k]=='?'))
       return true;
   if((Str[k]!='.')&&(k<L))// return false;
   {
      if(k<L)                     // ели м. б-ва или число и затем ) и ( не было, то не конец
      if(((l_be_letter.Pos(Str[k]))||(digit.Pos(Str[k])))&&(Str[k+1]==')')&&(bracket<0))
       return false;
      else
     {
        ...
в C# код такой
Код:
int Pos(string S, string s, int i)
        {
            int N = 0;
            int n;
            int j = i;
            //  int n;
            bool b = false;
            bool c = true;
            if (j == 1)
                n = 0;
            else
                n = 1;


            while ((!b) && (j < S.Length))
            {
                if ((S[j] == s[1]) && (((S[j - n]).Equals("")) || ((S[j - n]).Equals(",")) || (n == 0)))
                {
                    int k = 1;
                    c = true;
                    while ((c) && (k <= s.Length) && (j + k - 1 <= S.Length))
                    {
                        if (S[j + k - 1] != s[k])
                            c = false;
                        N = j + k;
                        k += 1;
                    }
                    j = j + k - 1;
                    if ((c) && (k == s.Length + 1) && (j <= S.Length))
                        if (((S[N]).Equals("")) || ((S[N]).Equals(",")))

                            b = true;
                    if ((c) && (k == s.Length + 1) && (j > S.Length))
                        b = true;
                }

                else
                {
                    j += 1;
                    n = 1;
                }
            }
            if (b)
                return j;
            else
                return 0;
        }
Код:
bool SentEnd(int k)
        {
            
            string S = "";
            int i = 0;
            int j;

            if (k < L)
            {
                if (Str[k + 1] == '(')
                    bracket += 1;
                if (Str[k + 1] == ')')
                    bracket -= 1;
            }

            if ((Str[k] == '!') || (Str[k] == '?'))
                return true;
            if ((Str[k] != '.') && (k < L)) // return false;
            {
                if (k < L) // ели м. б-ва или число и затем ) и ( не было, то не конец
                    if (((l_be_letter.Pos( Str[k])) || (digit.Pos(Str[k]))) && (Str[k + 1] == ')') && (bracket < 0))
                        return false;
                    else
                    {
                       ...
выдает ошибку "string" не содержит определения для "Pos" и не был найден метод расширения "Pos", принимающий тип "string" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
В чем может быть проблема?
Gladiator1922 вне форума Ответить с цитированием
Старый 29.03.2012, 21:57   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

1, Проблема в том, что вы не описали ошибку. Приведите её без перевода (мы разбираемся).
2. Выделите, хоть как-тот проблеммный участок кода (это Вам понятно, а нам - не очень).
3. Если уж скидываете пароект, то скидывайте его целиком, для чего Вам RAR или ZIP даден. Вы могли не учесть очень важные файлы, например Project.dpr, а без него, Ваш проекет просто бред сивой кобылы.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 29.03.2012 в 22:03.
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.03.2012, 22:10   #3
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

в hpp метод не прописан наверно.
Drugnir вне форума Ответить с цитированием
Старый 29.03.2012, 22:12   #4
Gladiator1922
 
Регистрация: 29.03.2012
Сообщений: 6
По умолчанию

исходный проект Вложение 49084

то что получилось Вложение 49085
Посмотрите пожалуйста, если не сложно.
Gladiator1922 вне форума Ответить с цитированием
Старый 30.03.2012, 11:18   #5
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Цитата:
Вложение не существует или не указан идентификатор (номер). Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией
Нельзя просмотреть файлы, хотя может это только у меня.
Drugnir вне форума Ответить с цитированием
Старый 01.04.2012, 18:55   #6
Gladiator1922
 
Регистрация: 29.03.2012
Сообщений: 6
По умолчанию

подскажите что тут не так
вот код на C++
Код:
String S=RichEdit1->Text;
   MainForm->RichEdit4->Lines->Clear();
   MainForm->RichEdit3->Lines->Clear();
    MainForm->RichEdit2->Lines->Clear();
     MainForm->RichEdit1->SelAttributes->Color=(TColor)0x00320064;//clMaroon;
     MainForm->RichEdit1->SelAttributes->Height =12;      // clNavy;
      MainForm->RichEdit1->SelAttributes->Name="MS Sans Serif";
     MainForm->RichEdit1->SelAttributes->Style =
     MainForm->RichEdit1->SelAttributes->Style << fsBold;
     RichEdit1->Lines->Clear();
     RichEdit1->Lines->Add(Trim(S));
    //if(N13->Checked)
    {
      TCursor Save_Cursor = Screen->Cursor;
        Screen->Cursor = crHourGlass;

      try
      {
         if(state==0)
         {
            int i=1;
            Panel2->Visible=false;
           //  WindowState=wsMinimized;
           //Width=0;
            theBlackboard=new TBlackboard();
            theBlackboard->Str=RichEdit1->Text;
            theBlackboard->assertProblem("");
         }
         else
         if(state==1)
         {
            for(int k=1;k<param->size();k++)
            {
               theBlackboard=new TBlackboard();
               RichEdit1->Lines->Clear();
               RichEdit1->Lines->LoadFromFile((*(param))[k]);
               theBlackboard->Str=RichEdit1->Text;
               theBlackboard->assertProblem((*(param))[k]);
            };
             Application->Terminate();
         };


      }
      __finally
      {
       Screen->Cursor = Save_Cursor;
      }
    }
переписал в C#
Код:
string S = richTextBox1.Text;
            //GlobalMembersMain.MainForm.RichEdit4.Lines.Clear();
            richTextBox3.Clear();
            richTextBox2.Clear();
            //GlobalMembersMain.MainForm.RichEdit1.SelAttributes.Color = (TColor)0x00320064; //clMaroon;
            //GlobalMembersMain.MainForm.RichEdit1.SelAttributes.Height = 12; // clNavy;
            //GlobalMembersMain.MainForm.RichEdit1.SelAttributes.Name = "MS Sans Serif";
            //GlobalMembersMain.MainForm.RichEdit1.SelAttributes.Style = GlobalMembersMain.MainForm.RichEdit1.SelAttributes.Style << fsBold;
            richTextBox1.Clear();
            richTextBox1.AppendText(S.Trim());

            
                //Cursor Save_Cursor = Screen.Cursor;
                //Screen.Cursor = crHourGlass;

                try
                {
                    if (state == 0)
                    {
                        int i = 1;
                        //Panel2.Visible = false;
                        //  WindowState=wsMinimized;
                        //Width=0;
                        theBlackboard = new Blackboard();
                        Blackboard.Str = richTextBox1.Text;
                        Blackboard.assertProblem("");
                    }
                    else
                        if (state == 1)
                        {
                            for (int k = 1; k < param.Count; k++)
                            {
                                theBlackboard = new Blackboard();
                                richTextBox1.Clear();
                                //richTextBox1.LoadFromFile(((param))[k]);
                                Blackboard.Str = richTextBox1.Text;
                                Blackboard.assertProblem(((param))[k]);
                            }
                            Application.Exit();
                        }


                }
                finally
                {
                    //Screen.Cursor = Save_Cursor;
                }
            
        }
в строке
Код:
theBlackboard = new Blackboard();
Инициализатор типа "Grafem.Blackboard" выдал исключение.

Последний раз редактировалось Gladiator1922; 01.04.2012 в 18:58.
Gladiator1922 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа не читает файл (С++ Builder 6) Alladyne Помощь студентам 1 21.01.2012 13:02
программа на builder P.S. Фриланс 7 02.06.2010 20:39
программа на builder kristall Фриланс 4 22.04.2010 23:05
Программа из С++ в Builder Satyrn C++ Builder 11 01.12.2009 22:08
C builder программа Luxian Помощь студентам 2 06.10.2009 21:43