C++switch陈述

C++ 使用关键字 switch、case、default对一个常数执行不同的分流,这构成多重选择的结构,形式如下

简单来说,switch后头接一小括弧,小括弧内为一常数运算式,计算出常数值若与其后case的位标(label) 相符,就会执行该case的陈述。case的位标也可以是常数运算式,不过通常直接用常数值。

如下列程式,假设有一位元编码储存在整数阵列(array) data之中,程式累计0与1各自出现的数目

#include <iostream>
  
int main() {
    int data[] = {1, 0 ,0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1};
    int one_count = 0;
    int zero_count = 0;
    int i;
    
    for (i = 0; i <= 15; i++) {
        switch (data[i]) {
            case 0: 
                zero_count++;
                break;
        
            case 1: 
                one_count++;
                break;
        }
    }
    
    std::cout << "There are " << zero_count;
    std::cout << " 0s, and " << one_count;
    std::cout << " 1s in data." << std::endl;
    
    return 0;
}

编译后执行,结果如下

$ g++ u0503_1.cpp
$./a.out 复制代码
数据中有 7 个 0 和 9 个 1。
$

第 10 行

switch (data[i]) {

data[i]会取得该阵列的第i个元素值,此为常数运算式。

由于情况只有0与1,因此上列程式只用0与1两个位标。另外第13 行及第17 行都有

break;

关键字break是用来暂时中断程式的执行,放在回圈内遇到break就会跳出回圈,而在switch里头的位标后面则是可以不让程式继续往下检查其他的位标,因为检查到相符的位标,程式即可暂停,若是没有用break,程式会持续执行到右大括弧},也就是switch陈述结束的地方,这样容易增加额外的程式执行时间。

以下程式计算字串中母音字母出现的次数,若非母音字母则用default位标执行另外的计算

#include <iostream>
  
int main() {
    char saying[] = {'N', 'e', 'v', 'e', 'r', ' ', 'p', 'u', 
                     't', ' ', 'o', 'f', 'f', ' ', 't', 'i',
                     'l', 'l', ' ', 't', 'o', 'm', 'o', 'r', 
                     'r', 'o', 'w', ' ', 'w', 'h', 'a', 't', 
                     ' ', 'y', 'o', 'u', ' ', 'c', 'a', 'n', 
                     ' ', 'd', 'o', ' ', 't', 'o', 'd', 'a', 
                     'y', '.'};
    
    int aV, eV, iV, oV, uV, other, i;
    aV = eV = iV = oV = uV = 0;
    other = i = 0;
    
    while (saying[i] != '\0') {
        switch(saying[i]) {
            case 'A': case 'a':
                aV++;
                break;
                
            case 'E': case 'e':
                eV++;
                break;
                
            case 'I': case 'i':
                iV++;
                break;
            
            case 'O': case 'o':
                oV++;
                break;
            
            case 'U': case 'u':
                uV++;
                break;
            
            default:
                other++;
                break;
        }
        
        i++;
    }
    
    std::cout << "a: " << aV;
    std::cout << std::endl;
    std::cout << "e: " << eV;
    std::cout << std::endl;
    std::cout << "i: " << iV;
    std::cout << std::endl;
    std::cout << "o: " << oV;
    std::cout << std::endl;
    std::cout << "u: " << uV;
    std::cout << std::endl;
    std::cout << "other: " << other;
    std::cout << std::endl;
    
    return 0;
}

编译后执行,结果如下

$ g++ u0503_2.cpp
$./a.out 复制代码
答:3
电子:2
我:1
○:7
于:3
其他: 39
$

default位标下的break其实可有可无,但习惯上每个case都有给一个break,所以default后加上break只是相对看起来整齐而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值