Я ищу способ взять строку и проверить 3 возможности.Перевести строку на номер
- Digit и, таким образом, преобразует его в знаковом междунар (не долго)
- ли символическое представление определены ранее во время выполнения, и преобразует его в знаковом ИНТ
- Ни
«символическое представление» будет в основном как ассоциативный массив, который начинается с 0 элементов и расширяется по мере добавления большего количества символов. Например позволяет сказать, например, что C имел ассоциативные массивы (я хочу) с этим peusdocode:
symbol_array['q'] = 3;
symbol_array['five'] = 5;
symbol_array['negfive'] = -5;
symbol_array['random294'] = 28;
signed int i;
string = get_from_input();
if(!(i = convert_to_int(string))) {
if(!(i = translate_from_symbol(string))) {
printf("Invalid symbol or integer\n");
exit(1);
}
}
printf("Your number: %d\n, i);
Идея в том, если они вошли в «5» было бы преобразовать его в 5 через convert_to_int, и если они вошли в «пять «он преобразует его в 5 через translate_from_symbol. Насколько мне кажется, может быть сложнее, если они войдут в «random294», это не будет конвертировать его в 294, а в 28. Если они войдут в «foo», тогда он выйдет (1).
Мои общие вопросы таковы: (Вместо того, чтобы сделать несколько сообщений)
При создании convert_to_int
я знаю, что я не должен использовать atoi
, потому что не будут обречены на провал. Некоторые люди говорят, что используют strtol
, но кажется утомительным, чтобы преобразовать его в недолгий int. Упрощенным (читай: кратчайшим) способом я нашел это использование sscanf
:
int i;
if ((sscanf(string, "%d", &i)) == 1){
return i;
}
Однако некоторые люди смотрят на это даже. Что такое лучший метод, если не sscanf или преобразование strtol?
Во-вторых, как я могу не только вернуть целое число, но и узнать, нашел ли он его. Например, если пользователь ввел «0», тогда он вернет 0, тем самым отключив мой FALSE в моей инструкции if. Я рассмотрел использование -1, если не найден, но поскольку я возвращаю подписанные int, тогда это также страдает от той же проблемы. В PHP я знаю, например, с strpos
они используют === FALSE
Наконец, есть ли короткий код, который эмулирует ассоциированные массивы и/или позволяет мне нажимать элементы на массив во время выполнения?