Поиск позиции элементов из строки символов в массиве

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

int findPosEl(char str1[], int arrpos[], int &sizepos, int arr[], int size){
    int el = INT_MIN;
    char *token = strtok(str1, " ");
    while (token!=NULL){
        el = atoi(token);
        for(int i=0; i<size; i++){
            if (el == arr[i]){
                sizepos ++;
                arrpos[sizepos] = i;
            }
        }
        token = strtok(NULL, " ");
    }
}

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


Ответы (1 шт):

Автор решения: Slava

Если пишете программу на С++, то проще использовать его стандартную библиотеку, а не С:

int i = 0;
for( std::istringstream in( str1 ); in >> i ; ) {
    auto pos = std::find( arr, arr + size, i ) - arr;
    if( pos < size )
        arrpos[ sizepos++ ] = pos;
}

вот и вся функция. Только не понятно, как вы собираетесь определять, какое число не было найдено. Можно для таких возвращать значение size, тогда в коде достаточно просто убрать строку с if()

→ Ссылка