计算字符串S中所有数字出现的次数。

时间:2019-07-01 19:51:55

标签: c++ string

输出格式:字符串= 7714

0 0

1 1

2 0

3 0 .....

7 2,依此类推,直到数字9。注意:每个数字出现值后都会有一个新行。在每个数字旁边显示的是15或20或25。

#include <iostream>

using namespace std;

int main()

{

    string s;
    cin>>s;
    int i,j;
    int c=0;
    int a;
    int l=s.length();
    for(i=0;i<l;i++)
    {
        cin>>s[i];
    }
    for(i=0;i<l;i++)
    {
        for(j=0;j<=9;j++)
        {
        if(s[j]==1 || s[j]==2 || s[j]==3 || s[j]==4 || s[j]==5 || s[j]==6 || s[j]==7 || s[j]==8 || s[j]==9 || s[j]==0)
        {
            c++;
        }
        }
    }
    for(i=0;i<=9;i++)
    {
        cout<<i<<" "<<c<<endl;
    }

}

3 个答案:

答案 0 :(得分:1)

算法的力量。 。

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    // Get String from user
    std::string s; std::cin >> s;
    // This is what we want to search
    std::string digits("0123456789");

    // Do all the work in a one liner
    std::for_each(digits.begin(), digits.end(), [&s](const char c) { std::cout << c << ' ' << std::count(s.begin(), s.end(), c) << '\n'; });

    return 0;
}

答案 1 :(得分:0)

由于一天后所有的评论和答案显然都无法帮助您,请参阅以下简单的解决方法。

本练习针对以C ++开头的人,因此我认为最好使用数组和循环之类的基本构造。

数组counts包含数字的计数,每个可能的数字各一个;因此数组的大小为10。请注意,字符串中的字符不是0..9的不是整数位,而是(很有可能)ASCII代码中的字符 48..57。字符“ 0”的ASCII码是整数值48,而不是整数值0。因此,要获得0..9的范围,必须从中减去48(或与整数48相同的“ 0”)。各自的角色。 希望对您有所帮助。

#include <iostream>
#include <string>

int main() {

    std::string s = "7714";
    int counts[10] =  { 0 };  // init all the counters with 0
    for (int i=0; i<s.length();i++) {  // iterate over the characters in s
        char c = s[i];
        if (isdigit(c)) {
            int index = c - '0'; // c is from '0' to '9' (i.e. ASCII codes 48..57); need it from 0..9; char('0') stands for int(49).
            counts[index]++;  // increment the counter representing the respective digit
        } else {
            std::cout << "invalid character (not a digit) in s" << std::endl;
        }
    }
    for (int i=0; i<9; i++) {
        std::cout << i << ": " << counts[i] << std::endl;
    }
}

输出:

0: 0
1: 1
2: 0
3: 0
4: 1
5: 0
6: 0
7: 2
8: 0

答案 2 :(得分:-1)

创建一个计数器数组。

int counters[10]; //will store the counts of each instance.
                 //counters[0] will count the number of 0s, etc.

将每个输入字符转换为整数。

look up how to do this on the internet.

增加计数器数组的索引。

counters[the_converted_character_to_integer]++;