东华oj 2022 c++ 【字符串】字符串对比

该程序用于判断两个字符串的关系,根据长度和字符匹配情况进行分类:1.长度不等;2.完全一致(区分大小写);3.仅在不区分大小写时一致;4.即使不区分大小写也无法一致。通过输入两个字符串,程序会输出它们所属的类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4种情况之一:

  1:两个字符串长度不等。比如 Beijing 和 Hebei

  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing

  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和        BEIjing

  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing

  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

 

#include<iostream>
#include<iomanip>
#include<cmath>
#include <stdio.h>
#include<string>
#include <string.h>
#include <bits/stdc++.h>
#include <cctype>
#include <cstring>
using namespace std;

    /*
    main函数
    ①输入两组字符串
    ②取两个字符串长度
    ③如果长度不一样(1)
    如果一样,看不区分大小写是不是一样,如果不一样(4),
    如果一样,看看是不是完全一样,如果不一样(3)否则(2)
    */
int main()
{
    char str1[15],str2[15];
    int i,p=0;
    cin.getline(str1,15);
    cin.getline(str2,15);
    if(strlen(str1)!=strlen(str2))cout<<1;
    else
    {
        for(i=0;i<strlen(str1);i++)
        {
            if(toupper(str1[i])!=toupper(str2[i]))//①写if,先写!=会起来更清楚 ②善用函数进行化简
            {
                cout<<4;
                p=1;
                break;
            }
        }
        if(p==0)
        {
            for(i=0;i<strlen(str1);i++)
            {
                if(str1[i]!=str2[i])
                {
                    cout<<3;
                    p=1;
                    break;
                }
            }
            if(p==0)cout<<2;
        }
    }
    return 0;
}

总结:算法上没什么难点,但整个格式我觉得蛮好看的,写起来很舒服

<think>好的,我现在需要处理用户关于东华大学OJ系统的C++候选人统计问题。首先,用户提到题目描述是关于三个候选人(zhang、li、wang)的得票统计,需要处理10个选民的输入,统计有效票和废票。用户想了解如何在东华大学OJ上解决这个问题,可能需要代码示例和步骤说明。 首先,我应该回忆题目的大致要求。题目要求使用结构体数组来存储候选人的姓名和得票数。选民输入的名字不区分大小写,如果输入错误则视为废票。最后输出各候选人的得票和废票数。 接下来,我需要考虑如何用C++实现这个功能。结构体定义是必须的,每个候选人包括姓名和得票数。然后初始化三个候选人的结构体数组,姓名需要统一为小写或大写,以便比较时不受大小写影响。例如,将输入的姓名转换为小写,然后与预设的小写姓名比较。 然后处理输入。循环10次,每次读取一个字符串,转换为小写,检查是否匹配三个候选人之一。如果匹配,对应候选人的票数加一;否则废票数加一。 最后输出结果,遍历结构体数组显示每个候选人的票数,以及废票数。 需要注意的是,东华大学OJ可能对输入输出有特定要求,比如严格的格式,或者必须使用C++而非C语言特性。例如,可能需要使用string类来处理字符串,或者使用cin和cout进行输入输出。 另外,要确保代码的健壮性。例如,选民输入可能包含空格或其他特殊字符吗?题目描述中没有提到,所以可能默认每个选民输入的是一个连续的字符串,没有空格。因此可以使用cin直接读取字符串。 代码示例的结构应该是: 1. 定义结构体。 2. 初始化结构体数组。 3. 读取和处理输入。 4. 统计票数。 5. 输出结果。 可能还需要将候选人姓名预先存储为小写,这样在比较时直接转换输入为小写即可,避免大小写问题。例如,结构体中存储"zhang",输入转换为小写后比较是否等于"zhang"、"li"或"wang"。 测试用例方面,可能需要考虑各种情况,比如大小写混合、完全错误的姓名等,确保废票统计正确。 然后,用户可能还会关心如何优化代码,或者常见的错误点在哪里。例如,忘记初始化结构体的票数为0,或者在比较字符串时没有正确处理大小写,导致统计错误。 此外,用户可能需要了解如何在东华大学OJ上提交代码,是否有特定的编译选项或输入输出要求。例如,是否需要使用freopen来处理文件输入输出,或者是否禁止使用某些库函数。 总结下来,回答需要分步骤讲解代码的实现,强调结构体的使用、字符串处理(大小写转换)、循环输入处理,以及输出格式的正确性。同时,提供示例代码并解释关键部分,确保用户能够理解并应用到OJ系统中。</think>关于东华大学OJ系统的候选人统计问题,以下是基于描述的实现方法和代码指南: ### 一、问题分析 题目要求统计三个候选人的得票数,并处理大小写不敏感的输入。核心步骤包括: 1. 定义候选人结构体 2. 处理大小写不敏感的输入比较 3. 有效票/废票分类统计 4. 结果输出 ### 二、实现步骤 1. **结构体定义** ```cpp struct Candidate { string name; int votes; }; ``` 2. **初始化候选人数组** ```cpp Candidate candidates[3] = {{"zhang",0}, {"li",0}, {"wang",0}}; ``` 3. **输入处理逻辑** ```cpp string input; for(int i=0; i<10; i++){ cin >> input; transform(input.begin(), input.end(), input.begin(), ::tolower); bool valid = false; for(auto &c : candidates){ if(input == c.name){ c.votes++; valid = true; break; } } if(!valid) invalidCount++; } ``` ### 三、完整代码示例 ```cpp #include <iostream> #include <algorithm> using namespace std; struct Candidate { string name; int votes; }; int main() { Candidate candidates[3] = {{"zhang",0}, {"li",0}, {"wang",0}}; int invalidCount = 0; for(int i=0; i<10; i++){ string input; cin >> input; // 统一转小写 transform(input.begin(), input.end(), input.begin(), ::tolower); bool found = false; for(auto &c : candidates){ if(input == c.name){ c.votes++; found = true; break; } } if(!found) invalidCount++; } // 输出结果 for(const auto &c : candidates){ cout << c.name << " " << c.votes << endl; } cout << "Invalid " << invalidCount; return 0; } ``` ### 四、注意事项 1. **字符串比较**:必须将输入转换为统一大小写格式进行比较 2. **初始化**:候选人票数初始化为0 3. **输出格式**:注意OJ系统对输出格式的严格要求[^1] 4. **效率问题**:数据量小时无需优化,直接线性查找即可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值