代码之家  ›  专栏  ›  技术社区  ›  Catz

正在尝试打印正确数量的“*”以代替数值

  •  0
  • Catz  · 技术社区  · 7 年前

    嘿,伙计们,我有一个很简单的问题,我想不出一个解决方案。我的函数void printRanges,正确检查数组值的范围,并递增数组int ticker[10]。我想做的是用星号*打印出每个类别的范围和数量,而不是数字本身。

    所以现在我可以像:“00:1”这样打印出来,但我想知道如何打印出相应数量的星星来代替数字。例如:“00:*”“10:*”等。我必须使用一组for循环吗?还是我真的错过了一些简单的东西!

    谢谢你的帮助!我真的很感激!

    #include <iostream>
    #include <string>
    #include <math.h>
    using namespace std;
    
    // declare const variable for array size, and array prototypes
    const int SIZE = 20;
    void fill(int arr[SIZE]);
    void print(int arr[SIZE]);
    void printRanges(int arr[SIZE]);
    
    int main() {
    
        // create an array with 20 components 
        int arr[SIZE] = { 0 };
    
        // call functions
        fill(arr);
        print(arr);
        printRanges(arr);
    
    
    
        // pause and exit
        getchar();
        getchar();
        return 0;
    }
    
    //fills array arr with 20 random numbers
    void fill(int arr[SIZE]) {
        for (int i = 0; i < SIZE; i++) {
            arr[i] = rand() % 100;
        }
    }
    
    // prints the array
    void print(int arr[SIZE]) {
        for (int i = 0; i < SIZE; i++) {
            cout << arr[i] << " ";
        }
    }
    
    // finds the range of each value in the array and stores it in the array ticker, then prints
    // a list from 00-90 documenting how many values are in each range
    void printRanges(int arr[SIZE]) {
        int ticker[10] = { 0 };
        char star = '*';
    
        for (int i = 0; i < SIZE; i++) {
            switch (arr[i] / 10) {
            case 0:
                ticker[0] = ticker[0] + 1;
                break;
            case 1:
                ticker[1] = ticker[1] + 1;
                break;
            case 2:
                ticker[2] = ticker[2] + 1;
                break;
            case 3:
                ticker[3] = ticker[3] + 1;
                break;
            case 4:
                ticker[4] = ticker[4] + 1;
                break;
            case 5:
                ticker[5] = ticker[5] + 1;
                break;
            case 6:
                ticker[6] = ticker[6] + 1;
                break;
            case 7:
                ticker[7] = ticker[7] + 1;
                break;
            case 8:
                ticker[8] = ticker[8] + 1;
                break;
            case 9:
                ticker[9] = ticker[9] + 1;
                break;
            }       
        }
        cout << endl << "00: " << star;
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   001    7 年前

    首先,可以通过简化来消除切换。然后需要一个循环来打印范围。

    void printRanges(int arr[SIZE]) {
        int ticker[10] = { 0 };
    
        for (int i = 0; i < SIZE; i++) {
            unsigned int index = arr[i] / 10;
            if (index < 10) {
                ticker[index] += 1;
            }
        }
        for (int i = 0; i < 10; i++) {
            // Print i pre-padded with "0"
            cout << setfill('0') << setw(2) << i << ": ";
            // Print the asterisks
            cout << setfill('*') << setw(ticker[i]) << "" << endl;
        }
    }
    

    别忘了

    #include <iomanip>
    

    对于 setw setfill .

    DEMO