我正在编写一个程序,它接受一个字符并比较它以查看它是否在某些字符范围内。例如,如果我获得的char是n
我进入状态3,如果它是a - m或o - z我进入状态4.我是C ++的新手所以我还在学习。< / p>
我可以这样说:
char c = file.next_char();
...
if (c in 'a'...'m', 'o'...'z')
{
state = 3;
} else {
state = 4;
}
答案 0 :(得分:1)
C ++中没有这样的语法。选项包括:
当值列表通常不连续时,请使用switch
语句,或
将显式字符值列表转换为连续范围,并将其转换为等效的布尔表达式。如您所知,字母字符由ASCII中连续的八位字节组成,因此您的伪代码等同于:
if ( (c >= 'a' && c <= 'm')
||
(c >= 'o' && c <= 'z'))
答案 1 :(得分:1)
如果您使用ascii(英语),您可以依赖所有小写字母相邻的事实。只需检查'a'&lt; = c&amp;&amp; c&lt; ='z' 在排除'n'之后。
如果国家不是其中之一,你永远不会说会发生什么,所以我不管它。
// 3 and 4 mean nothing. Give your states meaningful names
enum state_type {FirstState, SecondState, ThirdState, FourthState};
state_type state = FirstState;
char c = get_next_char();
if ('n' == c){
state = FourthState;
} else if ('a' < c && c < 'z'){
state = ThirdState;
} else {
// no change?
}
答案 2 :(得分:0)
您可以使用for循环来比较它,看它是否是第一个或第二个范围内的字母。代码将是这样的:
char range1[/*amount in array here*/] = "abcdefghijklmnopqrstuvwxyz";
//Substitute range on line above(the characters in the string)
for(int i = 0; i <= /*amount in array here*/; i++) {
if(range1[i] == /*nameoflettervariablehere*/){
//Code here
}
}
我很抱歉,但我不知道更有效的方法。