Не выходит начать итерацию в циклах <> 0

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
lnter
Сообщения: 14
Зарегистрирован: 20 окт 2008, 16:44

Помогите разобраться, пожалуйста, почему в цикле не выходит присвоть j-ку 4-ку?

Код: Выделить всё

 for (int j = 0; tr[j][0] != ""; j++)
                   {
                   
					   if (j == 0 && str < tr[4][0]) j = 0; 
					   //else if (j == 0 && str >= tr[4][0]) j = 4;              --Проблема.
                   
					   tmp = tr[j][0];
					   tmp2 = str;
					   transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper); 
					   transform(tmp2.begin(), tmp2.end(), tmp2.begin(), ::toupper);  
                                     
						if (tmp == tmp2) rep = tr[j][1];
				   
                   };
Спасибо!
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Надо хотя бы показать объявление переменных. Что такое tr и str? Не присваивается 4, значит условие не выполняется.
lnter
Сообщения: 14
Зарегистрирован: 20 окт 2008, 16:44

Я не правильно сформулировал.
Значение-то присваивается, только программа после этого виснет.

tr - это переводчик.
str - переводимое слово.

Код: Выделить всё

void translator (char* trans,char* text, char* result) {
     int i = 0, len, pos=0;
     string line;
     string tr[10][2], str, rep = "";
     string tmp, tmp2;
     int found;

     ifstream imyfile (trans);
     ifstream imyfile_txt (text);
     ofstream omyfile (result);

/*заполняем массив переводчика*/
     if (imyfile.is_open())
     {
         while ( imyfile.good() )
         {
          getline (imyfile,line);
          tr[i][1] = line.substr(line.find(' ')+1);
          tr[i][0] = line.assign(line, 0, line.find(' '));
          i++;
         }
         imyfile.close();
     };
   
     sort_str(tr); //sakarto tulkoshanas masivu

/*переводим текст по-строчно*/
     if (imyfile_txt.is_open())
     {
         while ( imyfile_txt.good() )
         {
          getline (imyfile_txt,line);
          line = line+" ";

          for (i=0; i != len; i++)
          {
              if (line.at(i) != ' ') str = str + line.at(i);        //слово до пробела

              else {
                   
				   pos = line.find(str);


-------------------------------------------------------------------------------------------------------------------------------------------                   
                   for (int j = 0; tr[j][0] != ""; j++)             //поиск слова в словаре
                   {
                   
					   if (j == 0 && str < tr[4][0]) j = 0; 
					   else if (j == 0 && str >= tr[4][0]) j = 4; //Проблема
                   
					   tmp = tr[j][0];
					   tmp2 = str;
					   transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper); 
					   transform(tmp2.begin(), tmp2.end(), tmp2.begin(), ::toupper);  
                                     
						if (tmp == tmp2) rep = tr[j][1];
                        cout << rep << endl;				     
                   };
-------------------------------------------------------------------------------------------------------------------------------------------  
                   
                   if (rep == "") rep = '[' + str + ']';      //если слово не найдено, заменяем его на [слово]

                   line.replace(pos, str.length(), rep);      //заменяем переводимое слово в строке

                   i = pos + rep.length();
                   str = "";
                   }
                   
              len = line.length();
              rep = "";
          };

          if (omyfile.is_open())
          {
            line = line.substr(0, len - 1);
            omyfile << line << endl;  /записываем переведённую строку

          }
         system ("pause");
         }

     }

     else cout << "Unable to open file";
	 
     omyfile.close();
     imyfile_txt.close();
	 
     for (i = 0; i < 8; i++)
     cout << tr[i][0] << ' '<<  tr[i][1]  << endl;
};
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

На какой строке виснет?
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

В код не вникал, но явный косяк в том, что в этом цикле нет проверки на j >= 10. Поэтому, предполагаю, что это зацикливание с бесконечно увеличивающимся j.
Ответить