C++ 如何在C+代码中组成字母循环部分+;行吗?

C++ 如何在C+代码中组成字母循环部分+;行吗?,c++,arrays,string,pointers,ascii,C++,Arrays,String,Pointers,Ascii,您可以在这里看到代码有三个部分。主要部分和瞬间部分要求我找出我所做的行号和字号。但当我调用第三部分(即字母频率函数)时,该部分不会出现在控制台中。我看了很多地方,但没有找到答案。如果不太麻烦的话,我会从中获益的,以防有人会这么做 预期输出: 输入您的字符串: 嗨,丽莎 你好吗# 输入有2行、7个单词和以下字母频率: A:2B:0C:0……像这样 立即输出: 输入您的字符串: 嗨,丽莎 你好吗# 输入有2行、7个单词和以下字母频率: #include <iostream> #inclu

您可以在这里看到代码有三个部分。主要部分和瞬间部分要求我找出我所做的行号和字号。但当我调用第三部分(即字母频率函数)时,该部分不会出现在控制台中。我看了很多地方,但没有找到答案。如果不太麻烦的话,我会从中获益的,以防有人会这么做

预期输出:

输入您的字符串: 嗨,丽莎

你好吗#

输入有2行、7个单词和以下字母频率: A:2B:0C:0……像这样

立即输出:

输入您的字符串: 嗨,丽莎

你好吗#

输入有2行、7个单词和以下字母频率:

#include <iostream>
#include<cmath>
#include<math.h>
#include<iomanip>
#include<string>
#include<cstring>
void letter_frequency(char le[]);

    int main()
    {
        char str[400] = " ";
        int words = 1;
        int lines = 1;

        cout << "Enter Your String : ";
        cin.get(*str);

        while (*str != '#')
        {
            cin.get(*str);
            if (*str == ' ' || *str == '\n')
                words++;
            if (*str == '\n')
                lines++;
        }

        cout << "The input has " << lines << " lines, " << words
            << " words," << " and the following letter frequencies : \n";
        letter_frequency(str);

        return 0;
    }

    void letter_frequency(char le[])
    {
        //for Capitals
        int sum = 0;
        for (int i = 65; i <= 95; i++)
        {
            sum = 0;
            for (int j = 0; j < sizeof(le); j++)
            {
                if ( (int)le[j] == i)
                {
                    sum = sum + 1;
                }
            }

            if (sum > 0)
            {
                cout << (char)i << ": " << sum << "\t" << endl;
            }
        }
        //For Small
        for (int i = 97; i <= 122; i++)
        {
            sum = 0;
            for (int j = 0; j < sizeof(le); j++)
            {
                if ( (int)le[j] == i)
                {
                    sum = sum + 1;
                }
            }

            if (sum > 0)
            {
                cout << (char)i << ": " << sum << "\t" << endl;
            }
        }
    }
#包括
#包括
#包括
#包括
#包括
#包括
无效字母_频率(字符[]);
int main()
{
字符str[400]=“”;
int字=1;
int行=1;

cout首先,除非教授强迫您使用原始
char
数组作为学习练习,否则您肯定应该使用
std::string

其次,在不深入研究代码是否真的实现了它的承诺的情况下,我怀疑您遇到的主要错误是在for循环中:


for(int j=0;jj你的
#include
s在哪里?请给出一个简单的输入和预期与实际输出的示例。在我看来,你一次只能得到一个字符,不断地用当前字符覆盖上一个字符;它总是被输出到
str[0]<代码> > LeTyLyTypU[/COD] >因此只有最后一个字符输入要处理,这是一个<代码> >代码> >代码,它不在你所检查的ASCII范围内,所以它不会打印任何东西。BTW:你使用C++,所以你有没有理由使用RAW <代码> char < /CARD>数组而不是<代码> STD::String < /Cord>?@ JabbWokkyy是的,在我的问题中,我被告知使用
char
,并等待
#includes
和输入以及预期结果output@Den-Jason我稍微了解你的观点。但我不知道如何解决它。我只是在学习,还是个初学者。我的意思是,我如何才能将输入放入函数<代码>字母频率我想不出来我尝试了你的1,4备选方案与我得到的结果类似。可能我无法整理出“字母频率”内的信息,很抱歉不理解你获得的2,3,5选项,我没有检查你的逻辑是否存在其他问题。在我尝试构建和运行调整后的代码时line compiler从未完成,这表明您还有其他问题。我只是回答了我所看到的与您使用该语言有关的一个特定缺陷——即,您使用了
sizeof
。关于其他答案,请随意提问,但#2应该很容易实现:只需替换您对
sizeof
的使用即可th
strlen
。它不会像您所需要的那样高效,但它至少会循环您想要的次数,并且易于实现。无论如何,非常感谢您告诉我我可以使用字符串。我可能会重新评估这个问题,或者我没有任何线索