конвертирование текста в цифры

woofmaster
Offline
Зарегистрирован: 29.11.2016

Здраствуйте, помогите составить скетч.При отправке слова в монитор серийного порта, нужен ответ цифрами. Например, при отправке слова stodvadcatodin, ответ 121, если tristodesat, то 310 и т,д)) слов немного, около десяти, если объясните начало, хотя бы эти две цифры, дальше уже сам доделывать буду))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если слов немного:

Два массива: в одном строки, в другом соответствующие им числа (либо один массив структур из двух полей).

Перебираете в цикле строки на равенство, если нашли - выводите число из другого массива по тому же индексу.

Если слов много:

массив строк должен быть упорядочен.

Ищете слово бинарным поиском. Дальше - аналогично.

Естественно, желательно обрабатывать ситуацию, когда ничего не найдено.

andrei.p
Offline
Зарегистрирован: 15.11.2016

Не прокатит тут бинарный поиск, так как слова пересекаются. Их нужно по убыванию проверять.

#define DECL_NUMBER(x, v) { x, sizeof(x) - 1, v }

struct number_t
{
	const char* word;
	int length;
	int value;
};

number_t numbers[] =
{
	DECL_NUMBER("tristo", 300),
	DECL_NUMBER("dvesti", 200),
	DECL_NUMBER("sto", 100),
	DECL_NUMBER("tridcat", 30),
	DECL_NUMBER("dvadcat", 20),
	DECL_NUMBER("desat", 10),
	DECL_NUMBER("tri", 3),
	DECL_NUMBER("dva", 2),
	DECL_NUMBER("odin", 1)
};

inline int read_part(const char** pos)
{
	for (int i = 0; i < sizeof(numbers) / sizeof(number_t); i++) {
		if (!strncmp(*pos, numbers[i].word, numbers[i].length)) {
			*pos += numbers[i].length;
			return numbers[i].value;
		}
	}
	*pos = NULL;
	return 0;
}

int read_number(const char* string)
{
	int number = 0;

	while (string) {
		number += read_part(&string);
	}

	return number;
}

 

woofmaster
Offline
Зарегистрирован: 29.11.2016

Тут нашел много полезной инфы насчет массивов)) изучаю
arduino.ru/forum/programmirovanie/dvumernyi-massiv-s-raznymi-tipami-dannykh