<commit_before>#include <iostream>

using namespace std;

int term(const char*& input);
int prim(const char*& input);

enum symbol{
	plus,
	minus,
	multiply,
	divide,
	number,
	wrong,
	end
};

symbol next(const char*& input){
	while (char curr=*input++){
		switch (curr){
			case ' ': continue;
			case '+': return symbol::plus; 
			case '-': return symbol::minus;
			case '*': return symbol::multiply;
			case '/': return symbol::divide;
		}
		if ((curr>='0')&&(curr<='9'))
			return symbol::number;
		else
			return symbol::wrong;
		}
	return symbol::end;
}

int expr(const char*& input) //разбиваем на слагаемые
{
	int res=term(input);
	symbol s=next(input);
	if (s!=symbol::end)
		return s==symbol::plus ? res+expr(input) : res-expr(input);
	else
		return res;
}

int term(const char*& input) //разбиваем на множители
{
	int res=prim(input);
	symbol s=next(input);
	if ((s==symbol::multiply)||(s==symbol::divide))
		return s==symbol::multiply ? res*term(input) : res/term(input);
	else{
		--input; //могли считать + или -, а не * или / => возвращаем в input
		return res;
	}
}

int prim(const char*& input) //считывание числа
{
	char s=next(input);
	int res=0;
	if (s==symbol::number){
		input--;
		char s=*input;
		while ((s>='0')&&(s<='9')){
			res = res * 10 + s - '0'; //переводим из char в int
			s=*++input;
		}
		return res;
	}
	else
		return -prim(input); 
}


int main(int argc, const char* argv[])
{
	//проверяем, сколько ввели параметров в командной строке
	if (argc!=2){
		cout<<"Wrong input"<<endl;
		return 0;
	}
const char* input=argv[1];
	cout<<expr(input)<<endl;

return 1;
}

<commit_msg>homework<commit_after>#include <iostream>

using namespace std;

int term(const char*& input);
int prim(const char*& input);

enum symbol{
	plus,
	minus,
	multiply,
	divide,
	number,
	wrong,
	end
};

symbol next(const char*& input){
	while (char curr=*input++){
		switch (curr){
			case ' ': continue;
			case '+': return symbol::plus; 
			case '-': return symbol::minus;
			case '*': return symbol::multiply;
			case '/': return symbol::divide;
		}
		if ((curr>='0')&&(curr<='9'))
			return symbol::number;
		else{
			cerr<<"Wrong input"<<endl;			
			exit(0);
		}
		}
	return symbol::end;
}

int expr(const char*& input) //разбиваем на слагаемые
{
	int res=term(input);
	symbol s=next(input);	
	if (s!=symbol::end)
		return s==symbol::plus ? res+expr(input) : res-expr(input);
	else
		return res;
}

int term(const char*& input) //разбиваем на множители
{
	int res=prim(input);
	symbol s=next(input);
	if (s==symbol::multiply)
		return res*term(input);
	if (s==symbol::divide){

	int check=term(input);

	if (check==0)//проверка деления на ноль
	{
		cerr<<"Zero division error"<<endl;
		exit(0);
	}
		return res/check;
	}
	else{
		--input; //могли считать + или -, а не * или / => возвращаем в input
		return res;
	}
}

int prim(const char*& input) //считывание числа
{
	char s=next(input);
	int res=0;
	if ((s==symbol::plus)||(s==symbol::divide)||(s==symbol::multiply)){
		cerr<<"Two or more operations is a row"<<endl;
		exit(0);
	}
	if (s==symbol::number){
		input--;
		char s=*input;
		while ((s>='0')&&(s<='9')){
			res = res * 10 + s - '0'; //переводим из char в int
			s=*++input;
		}
		return res;
	}
	else
		return -prim(input); 
}


int main(int argc, const char* argv[])
{
	//проверяем, сколько ввели параметров в командной строке
	if (argc!=2){
		cout<<"Wrong number of arguments"<<endl;
		return 0;
	}

	const char* input=argv[1];

	cout<<expr(input)<<endl;

return 1;
}


{'fraction_non_alphanumeric': 0.18821510297482838, 'fraction_numerical': 0.008009153318077803, 'mean_word_length': 3.9115168539325844, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5255635', 'n_tokens_mistral': 1505, 'n_tokens_neox': 1438, 'n_words': 350}