我想通过使用switch语句找到C或C ++中整数的长度我知道还有其他简单的方法,但我想出于某些原因使用这种方法,所以这是我到目前为止所尝试的:
#include <iostream>
#include <conio.h>
main() {
int a,length;
std::cout << "Please enter a number:\n";
std::cin >> a;
if(a<0)
a=-a;
switch(a){
case 1<...<10:length==1,break;
case 10<...<100:length==2,break;
case 100<...<1000:length==3,break;
}
std::cout << "It has "<< length <<" numbers\n";
getch();
}
所以,我不知道我可以使用什么而不是案例。
答案 0 :(得分:2)
很有可能使用一系列if
语句,例如
if (a >= 10000){
length = 5;
} else if (/* And so on
但这需要您对int
的可能的最大大小进行假设。这不是由C或C ++定义的,尽管最小可能范围是[-32767到+32767]。
某些编译器允许您使用基于范围的 switch
,但这是(i)不是标准C或C ++,以及(ii)您仍然会遇到问题可能的范围高于。
更好的方法是重复将int
除以10并计算您可以执行此操作的次数,直至达到零。并且不要忘记用负数和初始值0测试你的工作。
计算基数为10的对数是有问题的,因为计算发生在浮点上。
答案 1 :(得分:2)
如果您使用的是GCC扩展,可以描述如下。
switch(a){
case 1 ... 9 : length = 1; break;
case 10 ... 99 : length = 2; break;
case 100 ... 999 : length = 3; break;
}
答案 2 :(得分:1)
您可以在switch语句中使用以下方法。虽然在我的示范程序中我只使用标签default
,但您可以包含与枚举相对应的任何案例标签
#include <iostream>
int main()
{
while ( true )
{
enum : unsigned int { One = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine } digits;
std::cout << "Enter a non-negative number (0-exit): ";
unsigned int x = 0;
std::cin >> x;
if ( !x ) break;
int len;
switch ( ( digits = One, x < 10 ) ||
( digits = Two, x < 100 ) ||
( digits = Three, x < 1000 ) ||
( digits = Four, x < 10000 ) ||
( digits = Five, x < 100000 ) ||
( digits = Six, x < 1000000 ) ||
( digits = Seven, x < 10000000 ) ||
( digits = Eight, x < 100000000 ) ||
( digits = Nine, x < 1000000000 ), digits )
{
default:
len = digits;
break;
}
std::cout << x << " has " << len << " digits." << std::endl;
}
}
程序输出可能看起来像
Enter a non-negative number (0-exit): 1
1 has 1 digits.
Enter a non-negative number (0-exit): 11
11 has 2 digits.
Enter a non-negative number (0-exit): 111
111 has 3 digits.
Enter a non-negative number (0-exit): 1111
1111 has 4 digits.
Enter a non-negative number (0-exit): 11111
11111 has 5 digits.
Enter a non-negative number (0-exit): 111111
111111 has 6 digits.
Enter a non-negative number (0-exit): 1111111
1111111 has 7 digits.
Enter a non-negative number (0-exit): 11111111
11111111 has 8 digits.
Enter a non-negative number (0-exit): 111111111
111111111 has 9 digits.
Enter a non-negative number (0-exit): 0
交换机的替代表示,包括其他案例标签
switch ( ( digits = One, x < 10 ) ||
( digits = Two, x < 100 ) ||
( digits = Three, x < 1000 ) ||
( digits = Four, x < 10000 ) ||
( digits = Five, x < 100000 ) ||
( digits = Six, x < 1000000 ) ||
( digits = Seven, x < 10000000 ) ||
( digits = Eight, x < 100000000 ) ||
( digits = Nine, x < 1000000000 ), digits )
{
case One:
std::cout << "You could enter more digits.." << std::endl;
case Two: case Three: case Four: case Five: case Six: case Seven: case Eight:
len = digits;
break;
case Nine:
std::cout << "Do you like money?" << std::endl;
len = digits;
break;
default:
std::cout << "Too big number! It can be never" << std::endl;
break;
}
答案 3 :(得分:0)
您无法将^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$
用于此目的。请使用switch
语句
if-else
答案 4 :(得分:0)
您无法在切换案例中使用比较。如果在这种情况下逐渐降低限制,我会推荐一系列if else:
if (a >= 100) length = 3;
else if (a >= 10) length = 2;
else length = 1;
添加您想要处理的位数所需的数量。
另请注意,您必须分配到length
。当您执行length==1
时,您将返回一个布尔值。