All streams
Search
Write a publication
Pull to refresh
20
0

пушистый и скрытный

Send message
А как насчет этого?
Я бы не хотел разбираться и возиться с Qt ради пары библиотек.image
А использование Qt без Qt Creator автоматически означает возню с настройкой IDE и компилятора под Qt.
Насчет:
Хм. Ну если вы боитесь ООП, то ок. Мне ООП кажется более удобным и перспективным

Буду благодарен, если вы покажете мне, как улучшить код в данном случае используя ООП.
Не нужно создавать систему с наследованием классов ради пары функций.
Если вам так нравится уделять кучу времени решению абстрактных задач, построению иерархии классов, по ходу чего частенько появляется еще с 10ок проблем только из за ООП- то пожалуйста.
Если _вам_так_нравится_Python_ опять же ваше _дело_.
Насчет Java.
Разумеется, я просматривал тесты.
Не видно, где это Java хоть немного на равных с C++.
Да и элементарное рассуждение- jvm с ее не далеко лучшей интеграцией с системой будет явно уступать C++ везде где только можно.
Кстати, в большинстве «сравнений C++ и Java» сравнения ведутся с примитивными типами, не с кучей, и к тому же Java оптимизирует код, компиляторы C++ в этом отношении ведут себя честнее.
Я не против jvm, я просто не понимаю вашего беспокойства за Java)
Насчет отладки- как мне казалось современные IDE давно решили эту проблему…
И легкость (вами заявленная) в отладке- еще не повод выбирать Python
Знаете, вам то может быть и удобно таскать с собой скомпилированные библиотеки из Qt по отдельности- а мне нет. Не вижу в этом смысла. Ну а насчет 2гб- загляните но оф сайт Qt
Что то мне подсказывает, что я еще и занизил цифры.
Хорошо, где конкретно в этой задаче применимо ООП?
Можно было бы создать статический класс (привет C#), инкапсулировать функции немного по другому, и это все?
Насколько я знаю в *nix проблема с кодировками вообще не стоит так. Убираем setlocale и радуемся жизни.
Насчет Mono- много ли вы знаете людей постоянно использующих Mono с *nix?
Кроме разработчиков Mono конечно.
Всегда казалось, что C# — язык ориентированный на разработку в Windows.
Поэтому для наглядности решил использовать C++ при написании статьи)
Почему вам кажется, что в C# работа со строками (в этом случае) легче чем в C++?
Ну хорошо, size() заменим на Length, а дальше?
Аналогичный код на C# специально для вас
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;
	}
}


Конкретно со строками я больших изменений не увидел)
И кстати, GUI для бота я написал как раз на C#+WPF
Да, но промежуточная компиляция никуда не уходит. И можно забыть о UNIX
Qt как слишком огромен что бы привлекать его для такой простой задачи.
Да и где логика- использовать 2гигабитный фреймверк со своими велосипедами почти для всего
ради одного маленького консольного приложения?
Python мне не нравится из за синтаксиса (да да, вложенность) + это не компилируемый язык.
Java на десктопе ужасна не слишком быстра и создавалась она уж точно не для такого.
Ruby пугает своим ООП + Ruby поднялся только благодаря рельсам, благодаря им же и упал.
Вот и остается (Заметьте, для такой задачи) чистый C++ без тотального ООП, обязательного для всех стиля,
промежуточной компиляции и всего прочего, присущего тому что вы перечислили.
Впрочем, каждому свое)
Насчет строк не знаю, а как калькулятор Python вполне пригоден)
И еще есть вопрос- почему extern здесь не нужен?
Он нужен только в при объявлении прототипа из .cpp?
Спасибо, насчет возврата константы вы пожалуй правы)
Старался использовать const везде кроме тех случаев где его нельзя использовать, следуя советам из комментариев прочитанных ранее на хабре)
12 ...
7

Information

Rating
Does not participate
Registered
Activity