Другие языки программирования и технологии

С++. Чтение символов.

Как убрать чтение символов?
Например, при том же вводе "How are you" без символа "?" должно возвращать true, или, например, how. are. you) тоже true.
Как это реализовать?

#include "iostream"
const int max = 100;
using namespace std;
void lower(char *s) { for (int i = 0; s[i]; i++)s[i] = tolower(s[i]); }
int main() {
char a[max];
do {
cin.getline(a, max);
lower(a);
system("cls");
} while (strcmp(a, "how are you?") != 0);
cout << "I'm good";
cin.get();
}
*** Кана***
*** Кана***
56
Т. е задача убрать всю пунктуацию, преобразовать в строчные и сравнить?

Если так, то:
http://ideone.com/IzNkJF
Ирик Шангареев
Ирик Шангареев
84 764
Лучший ответ
*** Кана*** Ой, это что за иероглифы я сейчас увидел?
Не могли бы Вы расписать что творится после "before"?
И как записать как функцию?
Почти работает, только оставляет в конце лишний пробел http://rextester.com/JYE35688
И проверку на нежелательные символы надо доработать.
Улучшенный вариант:
char* src = " hoW . aRe. , you ?";
char dest[100];
char prev = ' ';
for(int n = strlen(src), i = 0, d = 0 ; i <= n; i++)
{
char c = src[i];
if (c && c <= '/' || c >= ':' && c <= '@')
{
c = ' ';
if (prev == c)
continue;
}
else if (c)
c = tolower(c);
prev = c;
dest[d++] = c;
}
std::cout << "*" << dest << "*";
Такие алгоритмы надо самому писать, иначе не научишься программировать.
Убрать чтение символов? Это врядли получится. Вы хотите сделать что-то вроде распознования текста? Тогда тут все не так просто. Самый примитивный вариант - выбрать все нежелательные символы, и заменять их в считанной строке на ""(пустую строку). Обычно подобным функция replace занимается, но не уверен, что в c++ она называется именно так. Правда тут вам придется предусмотреть ВСЕ нежелательные символы.

Но и то в итоге вы получите просто отфильтрованный текст, где если при вводе допущена любая ошибка - лишний пробел, грамматическая ошибка и т. д. - ваш код работать не будет. Вообще, на тему распознавания смысла текста (семантический анализ) целые диссертации пишутся, так что всё не так просто)
*** Кана*** А есть хоть какие-то варианты?