Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if(Word.find('-')!=-1)
#include "iconv/iconv.h"
std::string convert(const std::string& str, iconv_t conv)
{
iconv(conv, 0, 0, 0, 0);
const size_t buffer_size = 512;
char out[buffer_size];
const char* in_buf = str.c_str();
size_t in_size = str.size();
std::string result;
while (in_size > 0)
{
char* out_buf = out;
size_t out_size = buffer_size;
int n = iconv(conv, &in_buf, &in_size, &out_buf, &out_size);
if (n < 0)
{
if (errno != E2BIG) break;
}
result.append(out, buffer_size - out_size);
}
return result;
}
char *Win2Dos(char *in)
{
iconv_t ic =iconv_open("CP866","windows-1251");
const std::string _a = (std::string)in;
char *_o = (char *)convert(_a,ic).c_str();
iconv_close(ic);
return _o;
}
char *Dos2Win(char *in)
{
iconv_t ic =iconv_open("windows-1251","CP866");
const std::string _a = (std::string)in;
char *_o = (char *)convert(_a,ic).c_str();
iconv_close(ic);
return _o;
}
static class Bot{
public static readonly System.String MemoryPath="Memory.txt";
private static System.String[] GetWords(System.String Word){
//Подсчитывает слова для создания массива
//Не забываем, что последний символ массива- служебный, поэтому 1, а не 0
//В 0 изначально уходит строка
System.Int32 MaxIndex=1;
//Фиксирует наличие в предидущих циклах символов-разделителей
System.Boolean SeeFix=false;
for(System.Int32 i=0; i<Word.Length; ++i){
if(Word[i]==' '||Word[i]=='.'||Word[i]==','||Word[i]=='!'||Word[i]=='?'||Word[i]=='='||Word[i]=='/'||Word[i]=='\n'){
SeeFix=true;
continue;
}
if(SeeFix){
SeeFix=false;
++MaxIndex;
}
}
System.String[] ArrWords=new System.String[MaxIndex];
System.Boolean Fix=false;
for(System.Int32 i=0, ThisIndex=0; i<Word.Length; ++i){
if(Word[i]==' '||Word[i]=='.'||Word[i]==','||Word[i]=='!'||Word[i]=='?'||Word[i]=='='||Word[i]=='\n'){
Fix=true;
continue;
}
if(Fix){
Fix=false;
++ThisIndex;
}
ArrWords[ThisIndex]+=Word[i];
}
return ArrWords;
}
private static System.String GetAssociation(System.String Word){
System.IO.StreamReader Reader=System.IO.File.OpenText(MemoryPath);
while(true)
{
System.String Buffer=Reader.ReadLine();
if(Buffer==null){
break;
}
if(Buffer.Contains(Word)){
//Резервируем массив из двух слов для левой и правой ассоциаций
System.String[] Result=new System.String[2];
for(System.Int32 i=0, Index=0; i<Buffer.Length; ++i){
if(Buffer[i]=='='){
//Сиволы следующие после второго в строке символа '=' игнорируются
if(Index==1){
break;
}
++Index;
continue;
}
Result[Index]+=Buffer[i];
}
//Проверяем на содержание искомой строки только левую ассоциацию,
//При успехе возвращаем правую ассоциацию
if(Result[0].Contains(Word)){
Reader.Close();
return Result[1];
}
}
}
Reader.Close();
return null;
}
private static void PutAssociation(System.String Left, System.String Right){
System.IO.File.AppendAllText(MemoryPath, Left+'='+Right+'\n');
}
public static System.String GetFullAssociation(System.String Word){
if(Word==null){
return null;
}
System.String[] Words=GetWords(Word);
System.String Result=null;
System.Boolean FixResult=false;
for(System.Int32 i=0; i<Words.Length; ++i){
if(GetAssociation(Words[i])!=null){
FixResult=true;
Result+=Bot.GetAssociation(Words[i])+' ';
}
}
if(!FixResult){
Result=null;
}
if(Word.Contains("-")){
System.String[] NewAssociations=new System.String[2];
for(System.Int32 i=0, Index=0; i<Word.Length; ++i){
if(Word[i]=='-'){
if(Index==1){
break;
}
++Index;
continue;
}
if(Word[i]=='='){
continue;
}
NewAssociations[Index]+=Word[i];
}
PutAssociation(NewAssociations[0], NewAssociations[1]);
}
return Result;
}
}

setlocale(LC_ALL, "Russian");
#ifdef _WIN32
setlocale(LC_ALL, "Russian");
#endif
#ifdef _WIN32
#define OUTPUT_ENCODING "cp866"
#endif
#ifdef __linux__
#define OUTPUT_ENCODING "utf-8"
#endif
Хм. Ну если вы боитесь ООП, то ок. Мне ООП кажется более удобным и перспективным
Это ужасно… Windows до сих пор не знает что такое UTF8
программисты пишут на C++ то, что стоило бы писать на скриптовом языке
std::string line;
while (std::getline(Memory, line))
{
// ...
}
#ifndef BOT
#define BOT
#include <string>
std::string GetFullAssociation(const std::string&);
#endif //BOT
Избитая банальность. Как школьник бота писал