Ваш код довольно глючный и излишне сложный.Его можно упростить до чего-то более похожего на это:
void funOne(char a[], int aL, string &b) {
for(size_t i = 0; i < b.length(); ++i) {
if (b[i] == ' ') continue;
// check for other punctuation chars as needed...
bool found = false;
for(int j = 0; j < aL; ++j) {
if (b[i] == a[j]) {
found = true;
break;
}
}
if (!found) b[i] = '#';
}
}
Что можно еще больше упростить с помощью стандартного алгоритма std::find()
:
#include <algorithm>
void funOne(char a[], int aL, string &b) {
char *aEnd = a + aL;
for(size_t i = 0; i < b.length(); ++i) {
if (b[i] == ' ') continue;
// check for other punctuation chars as needed...
if (std::find(a, aEnd, b[i]) == aEnd) b[i] = '#';
}
}
Или с помощью std::string::find_first_not_of()
метод:
void funOne(char a[], int aL, string &b) {
for(size_t i = b.find_first_not_of(a, 0, aL);
i != string::npos;
i = b.find_first_not_of(a, i + 1, aL))
{
if (b[i] == ' ') continue;
// check for other punctuation chars as needed...
b[i] = '#';
}
}