我正在寻找一种获取字符串并检查 3 种可能性的方法。
- 数字,从而将其转换为有符号整数(不是长整数)
- 是先前在运行时定义的符号表示,并将其转换为带符号的 int
- 两者都不
“符号表示”基本上就像一个关联数组,从 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”,它将通过 convert_to_int 将其转换为 5,如果他们输入“5”,它将通过 translate_from_symbol 将其转换为 5。我觉得可能最难的是,如果他们输入“random294”,它不会将其转换为 294,而是转换为 28。如果他们输入“foo”,那么它将退出(1)。
我的一般问题是:(而不是发表多个帖子)
当convert_to_int
我知道我不应该使用atoi
时,因为它不会正确失败。有人说要使用strtol
,但将其转换回非长整数似乎很乏味。我发现的最简单(阅读:最短)的方法是使用sscanf
:
int i;
if ((sscanf(string, "%d", &i)) == 1){
return i;
}
然而,有些人甚至看不起这一点。如果不是 sscanf 或转换 strtol,有什么更好的方法?
其次,我怎样才能不仅返回一个整数,而且知道它是否找到了一个。例如,如果用户输入“0”,那么它将返回 0,从而在我的 if 语句中设置我的 FALSE。如果没有找到,我曾考虑使用-1,但由于我返回有符号整数,所以这也遇到了同样的问题。在 PHP 中,我知道例如strpos
他们使用=== FALSE
最后,是否有任何短代码可以模拟关联数组和/或让我在运行时将元素推送到数组?