Тема: С++
Показать сообщение отдельно
Старый 08.11.2007, 20:06   #19
COBEHOK
Новичок
 
Регистрация: 17.08.2004
Сообщений: 780
Help

Цитата:
Сообщение от REY Посмотреть сообщение
Конечно, и именно по этому в циклах перебора строк ,сказал перебирать элементы, пока значение строки не станет равным ноль символу.
Обрати внимание на строку pStr1[i+j+1]=pStr2[j]; из предыдущего варианта

Цитата:
Сообщение от REY Посмотреть сообщение
Не мог бы ты подсказать, как этот "дерьмовый" алгоритм оптимизировать, дабы исключить "временную сложность" и прочие беды. Если подскажешь, то искреннее тебе спасибо за это.
Это вариант уже лучше. Осталось только убрать последний цикл и вывести итоговую строку за раз. Можно еще перейти с индексов на указатели - мне кажется так код будет понятнее и не нужна арифметика на индексах

Код:
#include <iostream.h>
int main()
{
  cout << "Vvedite pervuiu stroku: \n";
  char szStr1[60]; // здесь динамическая память особо не нужна + 30 символов под вторую строку
  cin.getline(szStr1, 30);

  cout << "Vvedite vtoruiu stroku: \n";
  char szStr2[30];
  cin.getline(szStr2, 30);

  char* pIt1 = szStr2;
  while(*pIt1) ++pIt1; // pIt указывает на завершающий ноль
  
  for(char* pIt2 = szStr2; *pIt2; ++pIt1, ++pIt2)
     *pIt1 = *pIt2;
  *pIt1 = '\0'; // в цикле завершающий ноль не ставится

  cout << "Itogovaia stroka: " << szStr1 << endl;
  return 0;
}
Как-то так
__________________
Одним фломастером можно раскрасить почти все. Двумя - вообще все!
COBEHOK вне форума   Ответить с цитированием