Top.Mail.Ru
Ответы
Аватар пользователя

monstr1k_4

Monstr1k
подписчиков

Значения кармы
278 мнения
83 знания
истории
Аватар пользователя
4 месяца назад
от
Изменено
Проблема с передачей массива в функцию. Язык Си
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
 void polish_symb(char* input, int input_len) { 
 
	char arr_symb[LEN] = { 0 }; //Массив с математическими операндами 
	int arr_index[LEN] = { 0 }; //Массив с индексами операндов 
	char arr_digits[LEN] = { 0 }; //Массив с числами, без операндов 
	int i = 0; //Итератор 
	int j = 0; //Итератор 
	int flag = 0; //Для обработки знаков с пробелами (12 + 13) 
 
	for (; i < input_len; i++) { 
		if (input[i] == 32) { //Если обрабатывается пробел, то нужно сделать сдвиг 
			flag++; 
			continue; 
		} 
		else if (input[i] >= '0' && input[i] <= '9') { //Обработка цифр 
			arr_digits[i - flag] = input[i]; 
		} 
		else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '^' || input[i] == '!' || input[i] == '_') { //Обработка математических операндов 
			arr_symb[j] = input[i]; 
			arr_index[j] = i - flag; 
			arr_digits[i - flag] = ' '; 
			j++; 
		} 
		else { //Если есть ошибки в вводе 
			return; 
		} 
	} 
 
	arr_symb[j] = 'E'; //Конец строки 
	arr_symb[j + 1] = '\0'; 
	arr_index[j] = input_len - flag; //Для корректной обработки пробелов 
	arr_digits[i] = ' '; //хз зачем 
	arr_digits[i + 1] = '\0'; 
 
	//symb_find(arr_symb, arr_index, arr_digits, j + 1); 
	for (int i = 0; i < j+1; i++) { 
		if (arr_symb[i] == '+') { 
			plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков 
			del_start_symb(arr_symb, 1); //Удаляем знак из строки 
			del_start_symb(arr_index, 1); //Удаляем индекс знака из строки 
		} 
	} 
} 
 
//Процедура для обработки выражения 
void symb_find(char* arr_symb, int arr_index[], char* arr_digits, int len) { 
 
	//Нет поддержки умножения 
	 
	for (int i = 0; i < len; i++) { 
		if (arr_symb[i] == '+') { 
			plus_symb(arr_digits, arr_index[i], arr_index[i + 1]); //Передаем в функцию сложения массив с элементами, индексы расположения знаков 
			del_start_symb(arr_symb, 1); //Удаляем знак из строки 
			del_start_symb(arr_index, 1); //Удаляем индекс знака из строки 
		} 
	}
} 

Код выше.
Если строку symb_find(arr_symb, arr_index, arr_digits, j + 1); раскоментировать, то функция symb_find неправильно принимает arr_index. Как это можно исправить?
Однако, цикл, написанный в symb_find корректно работает в polish_symb

Дополнен

Исправил. Ошибка была в другом блоке кода