Как уже отмечалось в комментарии к вопросу, в операторе if есть опечатка
if (alpha_sym.find(example[i]) >= 0 && alpha_sym.find(example[i]) < example.size())
^^^^^^^^^^^^^^
Вместо example.size()
должно быть не менее alpha_sym.size()
Но в любом случае условие слишком сложное, и метод find
обычно вызывается три раза.
Этот фрагмент кода
for (int i = 0; i < example.size(); i++) {
if (alpha_sym.find(example[i]) >= 0 && alpha_sym.find(example[i]) < example.size()) {
cout << alpha_sym.find(example[i]) << " " << endl;
err += 0;
}
else {
cout << example[i]<<" "<< i << " не содержится в алфавите" << endl;
err++;
}
}
можно переписать следующим образом
for ( std::string::size_type i = 0; i < example.size(); i++ )
{
auto n = alpha_sym.find( example[i] );
if ( n != std::string::npos )
{
std::cout << n << " " << std::endl;
}
else
{
std::cout << example[i] << " " << i << " не содержится в алфавите" << std::endl;
++err;
}
}
Если ваш компилятор поддерживает C ++ 17, тогда вы даже можете написать следующим образом
for ( std::string::size_type i = 0; i < example.size(); i++ )
{
if ( auto n = alpha_sym.find( example[i] ); n != std::string::npos )
{
std::cout << n << " " << std::endl;
}
else
{
std::cout << example[i] << " " << i << " не содержится в алфавите" << std::endl;
++err;
}
}
Обратите внимание на то, что неиспользуемый параметр tape
(я думаю, упрощенный) функции может быть объявлен как
bool check_tape( const char *tape )
при условии, что оно не изменено в функции. В этом случае вы сможете передавать строковые литералы в качестве аргументов функции.
Вот демонстрационная программа
#include <iostream>
#include <string>
int main()
{
std::string example( "1435+212" );
std::string alpha_sym( "01234567+_" );
unsigned int err = 0;
for ( std::string::size_type i = 0; i < example.size(); i++ )
{
auto n = alpha_sym.find( example[i] );
if ( n != std::string::npos )
{
std::cout << n << " " << std::endl;
}
else
{
std::cout << example[i] << " " << i << " не содержится в алфавите" << std::endl;
++err;
}
}
}
Его вывод
1
4
3
5
8
2
1
2