2302_79933334 2024-06-14 20:04 采纳率: 81.3%
浏览 4

关于#c++#的问题:#include <bits>

这个全字母句的判断有些测试点不能通过
题目要求,多行输入,全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。他想知道哪些句子是全字母句。

#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[1000];
bool b[1000];
char ch;

//    getline(cin,s);
    while (true) {
bool b[1000]={0};
 cin.getline(s, 1000);
 if (s[0] == '\0') 
 break;
int flag=1;
        for(int i=0;i<strlen(s);i++)
        {if(s[i]>='a'&&s[i]<='z')
            b[s[i]-'a']= 1;
            else if(s[i]>='A'&&s[i]<='Z')
            b[s[i]-'A']= 1;
            
        }
        for(int i=0;i<26;i++)
        
        {
            if(b[i]==0)
            flag=0;
        
        }
                    if(flag==0)
                    cout<<"NO"<<endl;
                    else
                    
                    cout<<"YES"<<endl;
}
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-14 20:04
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的C++代码中存在几个问题,我将逐一指出并提供修正建议:

    1. 重复定义bool数组: 你的代码中在循环内部重新定义了bool b[1000],这会导致每次循环时数组都被重新初始化,之前的检查结果都会丢失。你应该将bool b[26] = {0};定义在循环外部。

    2. 使用#include<bits/stdc++.h>: 这个头文件是GCC编译器特有的,它包含了几乎所有标准库的头文件。虽然使用起来方便,但并不是所有编译器都支持,而且它可能导致编译器性能问题。建议使用标准的头文件包含方式,比如#include <iostream>#include <string>等。

    3. 大小写转换: 你的代码没有将所有字符转换为同一种情况(大写或小写)来检查,这可能导致判断错误。建议使用tolower函数将所有字符转换为小写。

    4. 字符串长度检查: 使用strlen函数检查字符串长度时,你应该确保字符串不包含空字符。另外,strlen函数在C++中通常用std::string::length()方法替代。

    5. 输出格式: 你的输出格式在某些情况下可能不符合题目要求,比如连续的输入没有换行。

    下面是修正后的代码示例:

    #include <iostream>
    #include <string>
    #include <cctype> // 包含tolower函数
    
    using namespace std;
    
    bool isPangram(const string& sentence) {
        bool letters[26] = {0};
        for (char ch : sentence) {
            if (isalpha(ch)) { // 检查是否为字母
                letters[tolower(ch) - 'a'] = 1; // 转换为小写并标记
            }
        }
        for (int i = 0; i < 26; ++i) {
            if (!letters[i]) {
                return false; // 如果有未标记的字母,则不是全字母句
            }
        }
        return true;
    }
    
    int main() {
        string s;
        while (getline(cin, s)) {
            if (s.empty()) break; // 检查是否读取到空字符串
            if (isPangram(s)) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
        return 0;
    }
    

    参考资料

    请注意,修正后的代码使用了std::string来处理字符串,这比使用字符数组更加方便和安全。同时,确保你的编译器支持C++11或更高版本,因为std::stringtolower函数在旧版本中可能不可用。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月14日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线