鱼C论坛

 找回密码
 立即注册
查看: 1590|回复: 2

[已解决]为什么测试时有部分错误

[复制链接]
发表于 2023-3-12 21:23:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有一段英文由若干单词组成, 单词之间用空格隔开,编写程序提取其中的所有不同的单词,按字典序从小到大输出。

输入格式:
输入一行字符串

输出格式:
输出每个单词,每个单词占一行

输入样例:
hello world
输出样例:
hello
world




#include <bits/stdc++.h>
using namespace std;

const int N = 1010;

map<string, int> cnt;

int main()
{
    string s;

    getline(cin, s);

    for(int i = 0; i < s.size(); i ++)
    {
        if(isalpha(s[i])) //是字母,说明找到一个有效单词
        {
            string word = ""; //存储以s[i]为首字母的这个单词
            int j = i;

            while(j < s.size() && isalpha(s[j])) //如果是字母一直往后找
            {
                word += tolower(s[j]);
                j ++;
            }

            cnt[word] ++; //循环结束,说明word就是刚才找到的单词
            i = j;
        }
    }

    for(auto [k, v] : cnt) cout << k << endl;

    return 0;
}

最佳答案
2023-3-13 18:59:54
本帖最后由 zhangjinxuan 于 2023-3-13 19:01 编辑

试试这个:
#include <bits/stdc++.h>
using namespace std;

const int N = 1010;

map<string, int> cnt;

int main()
{
    string s;

    getline(cin, s);

    for(int i = 0; i < s.size(); i ++)
    {
        if(isalpha(s[i])) //是字母,说明找到一个有效单词
        {
            string word = ""; //存储以s[i]为首字母的这个单词
            int j = i;

            while(j < s.size() && isalpha(s[j])) //如果是字母一直往后找
            {
                word += s[j];
                j ++;
            }

            cnt[word] ++; //循环结束,说明word就是刚才找到的单词
            i = j;
        }
    }

    for(auto [k, v] : cnt) cout << k << endl;

    return 0;
}

解释:题目说若干单词,单词可能有字母,所以你可以尝试不用什么转小写,如果还是错的,就把字母判断改成非空格判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-13 18:58:17 | 显示全部楼层
没办法,只能造数据自己去hack
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-13 18:59:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zhangjinxuan 于 2023-3-13 19:01 编辑

试试这个:
#include <bits/stdc++.h>
using namespace std;

const int N = 1010;

map<string, int> cnt;

int main()
{
    string s;

    getline(cin, s);

    for(int i = 0; i < s.size(); i ++)
    {
        if(isalpha(s[i])) //是字母,说明找到一个有效单词
        {
            string word = ""; //存储以s[i]为首字母的这个单词
            int j = i;

            while(j < s.size() && isalpha(s[j])) //如果是字母一直往后找
            {
                word += s[j];
                j ++;
            }

            cnt[word] ++; //循环结束,说明word就是刚才找到的单词
            i = j;
        }
    }

    for(auto [k, v] : cnt) cout << k << endl;

    return 0;
}

解释:题目说若干单词,单词可能有字母,所以你可以尝试不用什么转小写,如果还是错的,就把字母判断改成非空格判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表