Хотел бы спросить.как сделать белый список для строки?Ну то есть есть слова которые можно писать в этой строке и если в строке обнаружено слово которое не входит в этот список ,написать,например 'Ошибка'.При это слова помещённые в кавычки не проверять.
Вот мои потуги:
bool backslash = false;
string text;
cout << "Text: ";
getline(cin, text);
vector<string> words;
istringstream flow(text);
text.clear();
while (flow >> text)
{
int test = 0;
for (unsigned int i = 0; i < text.size(); i++)
{
if (text[i] == '\"')
backslash = !backslash;
break;
}
test%=2;
for (unsigned int i = 0; i < text.size(); i++)
{
if (!backslash) {
if(text != "hello") {
if(text != "world") {
cout << "ERROR" << endl;
return 0;
}
}
}
}
}
return 0;
Исходя из тега C++, я бы использовал множество set<string>
для слов. Или unordered_set
.
Далее - анализ основной строки, разбор на слова. Вопросов два.
в том что такое слово - т.е. что служит разделителями слов (или что не может входить в слово). От этого зависит способ обработки.
как обрабатывать кавычки. Можно просто сразу находить кавычки и вырезать все в них находящееся, после чего просто работать со строкой слов. Можно кто-то типа конечного автомата, считая кавычку отдельным словом, скажем. И после его прочтения игнорировать все слова до очередного слова-кавычки.
В зависимости от конкретных условий решения вопросов немного отличаются. Если уточните вопрос - можно будет уточнить и ответ...
Update
Ну вот по вашему уточнению...
#include <iostream>
#include <sstream>
#include <string>
#include <set>
using namespace std;
bool error(string s, const set<string>& dict)
{
size_t quot;
while((quot = s.find("\"")) != s.npos)
{
size_t last = s.find("\"",quot+1);
if (last == s.npos)
throw("Wrong quotes!");
s.erase(quot, last-quot+1);
}
istringstream is(s);
while(is >> s)
if (dict.find(s) == dict.end()) return true;
return false;
}
int main()
{
set<string> dict { "hello", "world", "dolly" };
cout << (error("hello \" white \" dolly",dict) ? "Error" : "OK" ) << endl;
cout << (error("hello white dolly",dict) ? "Error" : "OK" ) << endl;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Прошу не ругать если я что-то не так объяснил, мне 15 летЯ увлекаюсь программированием на языке С++
что означает это строка кода *(*(p = new double*) = new double) = 2;
А нет ли в Windows ничего такого, похожего на сигналы в POSIX?