C++ 如果已在C+;中回显另一个相同值数组元素,则防止循环回显+;

C++ 如果已在C+;中回显另一个相同值数组元素,则防止循环回显+;,c++,arrays,C++,Arrays,首先,很抱歉标题用词不当。我想不出更好的说法了 我面临的问题如下:在我的程序的一部分中,程序计算不同a-zA-Z字母的出现次数,然后告诉我们在一个数组中可以找到多少个字母。然而,问题在于: 如果我有一个由A;A.FA.D或任何类似内容,输出如下: A-3 A-3 F-1 A-3 D-1 但我必须这样做: A-3 F-1 D-1 我可以很容易地解决这个问题,但是我不能使用额外的数组来检查已经回传了哪些值。我知道为什么会发生这种情况,但我不知道不使用额外的数组就可以解决它的方法 这是代码段(数组仅由

首先,很抱歉标题用词不当。我想不出更好的说法了

我面临的问题如下:在我的程序的一部分中,程序计算不同
a-zA-Z
字母的出现次数,然后告诉我们在一个数组中可以找到多少个字母。然而,问题在于:

如果我有一个由
A;A.FA.D
或任何类似内容,输出如下:

A-3

A-3

F-1

A-3

D-1

但我必须这样做:

A-3

F-1

D-1

我可以很容易地解决这个问题,但是我不能使用额外的数组来检查已经回传了哪些值。我知道为什么会发生这种情况,但我不知道不使用额外的数组就可以解决它的方法

这是代码段(数组仅由字符组成,不值得将其添加到代码段):

n
是程序开始时要求用户选择的数组大小(不包括在代码段中)

initburts
是正在与所有其他值进行比较的当前数组成员ID

burts
是循环检查完一个字母并移动到下一个字母后重置的计数器

do {
    for (i = 0; i < n; i++) {

        if (array[initburts] == array[i]) {
            burts++;
        }
    }

    cout << "\n\n" << array[initburts] << " - " << burts;
    initburts++;
    burts = 0;
    if (initburts == n) {
        isDone = true;
    }
}
while (isDone == false);
do{
对于(i=0;i不能先进行计数,然后循环计数并打印结果

std::map<decltype(array[0]), std::size_t> counts;
std::for_each(std::begin(array), std::end(array), [&counts](auto& item){ ++counts[item]; });
std::for_each(std::begin(counts), std::end(counts), [](auto& pair) { std::cout << "\n\n" << pair.first << " - " pair.second; });
std::map计数;
std::for_each(std::begin(array),std::end(array),[&counts](auto&item){++counts[item];});

std::for_each(std::begin(counts)、std::end(counts),[](auto&pair){std::cout首先进行计数,然后循环计数打印结果

std::map<decltype(array[0]), std::size_t> counts;
std::for_each(std::begin(array), std::end(array), [&counts](auto& item){ ++counts[item]; });
std::for_each(std::begin(counts), std::end(counts), [](auto& pair) { std::cout << "\n\n" << pair.first << " - " pair.second; });
std::map计数;
std::for_each(std::begin(array),std::end(array),[&counts](auto&item){++counts[item];});
std::for_each(std::begin(counts),std::end(counts),[](auto&pair){std::cout)
指针算法…如果你只是复制这段代码,很可能你的老师会怀疑你,但是它应该给你必要的提示来组成你自己的变体(使用索引而不是指针…)


指针算法…如果你只是复制这段代码,很可能你的老师会怀疑你,但它应该给你必要的提示,让你自己编写变体(使用索引而不是指针…。

我会这样做

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string s;

    vector<int> capCount(26, 0), smallCount(26, 0);

    cout << "Enter the string\n";
    cin >> s;

    for(int i = 0; i < s.length(); ++i)
    {
        char c = s.at(i);

        if(c >= 'A' && c <= 'Z')
            ++capCount[(int)c - 65];

        if(c >= 'a' && c <= 'z')
            ++smallCount[(int)c - 97];
    }

    for(int i = 0; i < 26; ++i)
    {
        if(capCount[i] > 0)
            cout << (char) (i + 65) << ": " << capCount[i] << endl;

        if(smallCount[i] > 0)
            cout << (char) (i + 97) << ": " << smallCount[i] << endl;
    }
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串s;
载体容量(26,0),小容量(26,0);
cout>s;
对于(int i=0;i='A'&&c='A'&&c 0)

我会这样做的

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string s;

    vector<int> capCount(26, 0), smallCount(26, 0);

    cout << "Enter the string\n";
    cin >> s;

    for(int i = 0; i < s.length(); ++i)
    {
        char c = s.at(i);

        if(c >= 'A' && c <= 'Z')
            ++capCount[(int)c - 65];

        if(c >= 'a' && c <= 'z')
            ++smallCount[(int)c - 97];
    }

    for(int i = 0; i < 26; ++i)
    {
        if(capCount[i] > 0)
            cout << (char) (i + 65) << ": " << capCount[i] << endl;

        if(smallCount[i] > 0)
            cout << (char) (i + 97) << ": " << smallCount[i] << endl;
    }
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串s;
载体容量(26,0),小容量(26,0);
cout>s;
对于(int i=0;i='A'&&c='A'&&c 0)

不能对数组进行排序并在打印时打印所有元素检查是否已打印如果已打印请跳到下一行您可以循环浏览已排序的数组版本,继续计数出现次数,直到字母更改为止(全部在一个循环中),然后输出。并输出最后一行。尝试检查是否已打印该值是一种非常落后的方法,您应该只打印一次。对数组进行排序,并在打印时打印所有元素。检查是否已打印。如果是,只需跳到下一行即可。您可以在已排序的数组版本中循环,继续计数直到字母发生变化(全部在一个循环中),然后输出。并输出最后一个。尝试检查是否已打印该值是一种非常落后的方法,您应该只尝试打印一次