size_t found = s.find("|") != string::npos
Это декларация;он анализируется как
size_t found = (s.find("|") != string::npos)
Таким образом, found
всегда будет 1
или 0
.Вам нужно объявить found
вне условия и использовать несколько скобок:
size_t found;
if ((found = s.find("|")) != string::npos)