Странное поведение массива при работе find()

193
11 июня 2017, 18:31

Здравья желаю

Пишу программу для перебора текстового файла и нахождения в нём нужного символа(слова) и тут...

наткнулся на аномалию:)) вот блок кода:

std::fstream input(dir, std::ios::in|std::ios::out|std::ios::app);
   if(!input){std::cout<<"FILE_ERROR"<<std::endl; return;}
   std::string buffer;
   int arr_find[20], i=0;
   do{
      std::getline(input, buffer);//чтение строки
      arr_find[i] = buffer.find(account);//возвращает 0 если найден нужный символ
      if(arr_find[i] == 0){
         break;
      }else{i++;}
      std::cout<<arr_find[i]<<":"<<i<<std::endl;//вывод массива
   }while(!input.eof());

создаётся массив типа int (arr_find[20]) для заполнения работы функции find() из библиотеки string.h(cstring.h).

Массив должен заполнятся значениями -1 или 0(0 если найден нужный символ(строка)).

Прогоняю программу через файл.txt, ищу "asd":

a
s
z
xc
af
f
sss
asd

И на выходе получаю вывод массива:

3:1
1989621908:2
6356060:3
1989316383:4
6356088:5
1877822365:6
6356680:7

работаю в vim, командная строка Windows, MinGW32

Я уже не знаю что и думать, причин такому поведению я не вижу. Прошу помочь указать на мои ошибки.

Спасибо.

Answer 1

Проблема в том, что если arr_find[i] не равен 0. То есть строка не нашлась на нулевом месте, то вы прибавляете к i единицу:

if(arr_find[i] == 0){
         break;
      }else{i++;}

После чего вы выводите значение ячейки arr_find[i], но это не та ячейка, в которую вы записали результат, а следующая. А в этой ячейки может находиться всё, что угодно. Так как она была заполнена случайным числом при создании и больше не изменялась.

Можно переписать следующий код так:

if(arr_find[i] == 0) {
         break;
} 
else {
    std::cout << arr_find[i] << ':' << i << std::endl;  // вывод массива
    i++;
}
READ ALSO
Инициализация переменной в функции

Инициализация переменной в функции

Всем приветУ меня есть класс для авторизации пользователя, в котором находится переменная int id пользователя

216
Изменить класс white на black в &ldquo;select&rdquo; js или jquery

Изменить класс white на black в “select” js или jquery

Есть select с 2 значениями white и black

274
Парсинг строки таблицы &lt;tr&gt;

Парсинг строки таблицы <tr>

Доброго времени суток! Есть некая таблица 4x4, необходимо выбрать строку и разбить столбцы, выбранной строки(выбранной строке присваивается...

326