开发者

Intermediate values in C++

开发者 https://www.devze.com 2022-12-24 17:14 出处:网络
I 开发者_运维技巧can not find how to implement a design in C++. In the language of Delphi in case the operator can write the following design:

I 开发者_运维技巧can not find how to implement a design in C++. In the language of Delphi in case the operator can write the following design:

    case s[j] of
         '0'..'9','A'..'Z','a'..'z','_': doSomeThing();

How can i do the same in c++. Attracts me is the construction type 'a' .. 'z' and etc...

Thank you


You can do it using isalnum function as:

if(isalnum(s[j]) || (s[j] == '_') )


The short answer is that it is impossible. You can simulate a list of values like this:

switch (s[j])
{
case '0':
case '1':
case '2':
case '3':
    doSomething1();
    break;
case 'a':
case 'b':
case 'c':
case 'd':
    doSomething2();
    break;
}

But you cannot specify ranges. You should use if-else-if if you need ranges:

if ( (s[j] >= '0') && (s[j] <= '9'))
    doSomething1();
else if ( (s[j] >= 'a') && (s[j] <= 'z'))
    doSomething2();

Anyway, if's are much more safe than switch's :-)


You wouldn't use a switch/case statement for this in C++. C++ also provides pre-built functions to test most of that, so you'd use something like:

if (isalnum(s[j]) || s[j]=='_')
    doSomething();


You can try this too:

const std::string char_set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
if (char_set.find(s[j] != std::string::npos)
{
    doSomething();
}
0

精彩评论

暂无评论...
验证码 换一张
取 消