Как сохранить удаление значений на нечетных местах от вектора, пока мы просто осталась одна?

Пусть J является вектором, имеющим значения (0, 1, 1, 2, 3, 5, 8, 3, 1)

Я хочу, чтобы извлекать все значения из нечетных местах от вектора до J имеет только один элемент в нем.

(0, 1, 1, 2, 3, 5, 8, 3, 1) => (1, 2, 5, 3) => (2,3) => (3)

Как я могу добиться этого?

Мой подход:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
  int J[] = {0, 1, 1, 2, 3, 5, 8, 3, 1};
  int len=sizeof(J)/sizeof(J[0]);
  vector<int> Jvec;
  for (int i=0; i<len; i++) {  //Putting the values of array into Jvec
    Jvec.push_back(J[i]);
  }

  while (Jvec.size()!=1) {
    vector<int> oddJ;
    for (int k=0; k<Jvec.size(); k=k+2) {  //Storing values of odd places
      oddJ.push_back(Jvec[k]);
    }

    for (int i=0; i<oddJ.size(); i++) {
      Jvec.erase(remove(Jvec.begin(), Jvec.end(), oddJ[i]), Jvec.end()); //removing values from vector by value, not index
    }
  }
  cout << Jvec[0];
  return 0;
}

Я получаю 5, а не 3. Моя логика небезупречна? Где я буду неправильно?

+1
2019-09-17 11:40:49
источник
3 ответа

Я отвечаю на мой собственный вопрос. Я понял, что некоторые переменные были в неправильном месте.

+0
2019-09-17 11:55:28

Учитывая, что -это очень простой, здесь вы действительно нужно только grep, и простую строку на Perl

grep --include=\*.txt -rlH . -e 'how_to_repeat' | xargs 
    perl -i.bak -wpe's/how_to_repeat\K.*/= Run testing data/'

В (или в) поиска пути (.) не рекурсивно, а на (или ) возвращает только имена файлов, как нужен здесь. Помимо сть еще варианты в , которые позволяют адаптировать точнее, какие файлы/каталоги для поиска или нет.

Потом в для тех, Возвращенные имена, чтобы программа на Perl.

Если у вас есть более сложные критерии, какие файлы посмотреть, то ожет помочь, конечно.

Комментарии

  • Что капли все матчи перед этим, так что нам нужно не заменить; см. "посмотри вокруг утверждения" в расширенной модели в perlre. Остальная часть линии будет тогда сопровождаться и таким образом заменить

  • В меняет файл на месте , но .bak делает это сохранить резервную копию

  • Это может быть возможным, чтобы построить список файлов с Глоб оболочку, а затем вы можете передать его непосредственно в Perl одна-вкладыш, поскольку программа не будет изменять файлы, в которых шаблон не найден.

    Фильтрация списка файлов с сначала должен быть быстрее, но вы только заметили что многие файлы, в частности, если не многие из них фразу (многие не обрабатываются дважды)

Регулярное выражение в вопрос не работает, потому что остальные линии не совпадают, так что это действительно не заменить, он будет работать с добавлен до конца свой узор, как выше.

+0
2019-09-17 12:04:15

Чтобы соответствовать до конца линии, вы просто должны добавить .* в конце соответствующего выражения:

s/how_to_repeat .*/how_to_repeat= Run testing data /

Поэтому вся команда, как подтвердил в комментариях, становится:

perl -p -i -e 's/how_to_repeat .*/how_to_repeat= Run testing data  /'   `find ./ -name *.txt`
+0
2019-09-17 12:04:15

Посмотрите другие вопросы по меткам