Jettblue_jr 2023-02-01 10:55 采纳率: 100%
浏览 45
已结题

一道关于结构体比较函数的问题

可有偿,可议价!

题目描述:

统计字符串信息
时间限制:1.0s 内存限制:256.0MB
问题描述
  输入有两个字符串,统计出字符串的长度,空格个数,字母个数和数字个数,放入两个结构体中。用一个函数对两个结构体进行比较。判断4个统计量是否相同。
输入格式
  输入有两行。各为一个字符串。
输出格式
  输出有4行。第一行输出字符串长度是否相等,相等输出"True",不相等输出“False”。第二行输出字符串空格个数是否相等,相等输出"True",不相等输出“False”。第三行输出字符串字母(大小写均算)个数是否相等,相等输出"True",不相等输出“False”。第一行输出字符串数字个数是否相等,相等输出"True",不相等输出“False”。
样例输入
2 apples
Try this
样例输出
True
True
False
False
数据规模和约定
  每个字符串长度不超过2000。
  每个字符串只有数字,字母,空格,不含其它字符。
  要求用结构体实现每个字符串统计量。用一个函数调用两个结构体比较。

我遇到的问题:

一道关于结构体比较函数的问题,谁能帮蒟蒻看看?
如果不使用结构体,只能拿一半分

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-01 11:18
    关注

    这是代码,可以试一下,可行还请采纳:
    用了 C++ 结构体来统计两个字符串的各种信息(长度、空格个数、字母个数、数字个数),并使用了函数来比较这些信息是否相同。

    首先,使用两个结构体,一个结构体存储每个字符串的信息,结构体内有四个变量:len(存储字符串长度)、space(存储字符串中空格的个数)、alpha(存储字符串中字母的个数)、digit(存储字符串中数字的个数)。然后,循环读入两个字符串,并对每个字符串进行遍历,统计这些信息。

    最后,使用函数对这两个结构体进行比较,判断它们的信息是否相同,并在输出中呈现出来。

    该代码的基本思路是:读入字符串,统计信息,比较信息,输出结果

    #include <iostream>
    #include <cstring>
    #include <cctype>
    
    using namespace std;
    
    struct StrInfo
    {
        int length, space, letter, digit;
    };
    
    bool compareStrInfo(StrInfo a, StrInfo b)
    {
        return a.length == b.length && a.space == b.space && a.letter == b.letter && a.digit == b.digit;
    }
    
    StrInfo countStrInfo(char str[])
    {
        StrInfo info;
        info.length = strlen(str);
        for (int i = 0; i < info.length; i++)
        {
            if (isspace(str[i])) info.space++;
            else if (isalpha(str[i])) info.letter++;
            else if (isdigit(str[i])) info.digit++;
        }
        return info;
    }
    
    int main()
    {
        char str1[2010], str2[2010];
        cin.getline(str1, 2010);
        cin.getline(str2, 2010);
        StrInfo info1 = countStrInfo(str1);
        StrInfo info2 = countStrInfo(str2);
        cout << (compareStrInfo(info1, info2) ? "True" : "False") << endl;
        cout << (info1.space == info2.space ? "True" : "False") << endl;
        cout << (info1.letter == info2.letter ? "True" : "False") << endl;
        cout << (info1.digit == info2.digit ? "True" : "False") << endl;
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月1日
  • 已采纳回答 2月1日
  • 修改了问题 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号