在C ++

时间:2016-10-01 00:54:26

标签: c++ c++11

我正在编写一个程序,它接受一个字符并比较它以查看它是否在某些字符范围内。例如,如果我获得的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;
}

3 个答案:

答案 0 :(得分:1)

C ++中没有这样的语法。选项包括:

  1. 当值列表通常不连续时,请使用switch语句,或

  2. 将显式字符值列表转换为连续范围,并将其转换为等效的布尔表达式。如您所知,字母字符由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
        }
    }

我很抱歉,但我不知道更有效的方法。