[英]Finding the length of an integer with switch in C or C++
我想通過使用 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();
}
所以,我不知道我可以用什么來代替案例。
如果你使用的是 GCC 擴展,可以描述如下。
switch(a){
case 1 ... 9 : length = 1; break;
case 10 ... 99 : length = 2; break;
case 100 ... 999 : length = 3; break;
}
使用一系列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 為底的對數是有問題的。
您可以將以下方法與 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;
}
您不能為此目的使用switch
。請switch
if-else
語句
#include <iostream>
#include <conio.h>
int main() {
int a,length;
std::cout << "Please enter a number:\n";
std::cin >> a;
if(a<0)
a=-a;
if( a >= 1 && a < 10 )
length = 1;
else if( a >= 10 && a < 100 )
length = 2;
/* .............. */
std::cout << "It has "<< length <<" numbers\n";
getch();
}
您不能在 switch case 中使用比較。 我會推薦一系列 if else if 在這種情況下逐漸降低限制:
if (a >= 100) length = 3;
else if (a >= 10) length = 2;
else length = 1;
根據您要處理的位數添加任意數量的數字。
另請注意,您必須分配給length
。 當您執行length==1
您將返回一個布爾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.