m0_73956338 2023-04-14 12:12 采纳率: 75%
浏览 21
已结题

请教一道c++的题,有空请看一下

请问该题的思路是什么,应该怎么打,用vector储存数据,再用for(char &c: )将_改为" ";但是还要判断每个小的字符串是否相等,开始想不明白了

img

#include<iostream>
#include<algorithm>
#include<vector>
#include<sstring>
#include<map>
using namespace std;
int main()
{
    vector<string> p1;
    int n,a[1010];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a;
        p1.push_back(a);
    }
    for(int i=0;i<n;i++)
    {
        for(char &ch:p1[i])
        {
            if(ch=='_') ch=' ',++a[i];
        }
    }
    vector<string> p2;
    for(int i=0;i<n;i++)
    {
        p2.push_back(p1[i]);
        sort(p2.begin(),p2.end);
    }
}


  • 写回答

2条回答 默认 最新

  • TengMMVP 2023-04-14 13:51
    关注

    一.存在的问题

    1. 包含错误的头文件:#include<sstring> 应该是 #include<sstream>

    2. 在循环内部,将 int 数组 a 的元素读取到一个字符串向量 p1 中。

    3. 排序 p2 向量,但没有使用括号()调用sort函数。

    4. 代码没有实现题目要求的功能,即删除假身字符串。

    5. 没有输出最终结果。

      二.参考代码

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <sstream>
    #include <unordered_set>
    
    using namespace std;
    
    // 将字符串分割成数字、小写字母、大写字母和下划线部分的函数
    vector<string> split_string(const string &s) {
        stringstream ss(s);
        string temp;
        vector<string> parts;
    
        while (getline(ss, temp, '_')) {
            parts.push_back(temp);
        }
    
        return parts;
    }
    
    // 检查两个字符串是否相等的函数
    bool are_strings_equal(const vector<string> &a, const vector<string> &b) {
        if (a.size() != b.size()) return false;
    
        for (const auto &s : a) {
            if (find(b.begin(), b.end(), s) == b.end()) {
                return false;
            }
        }
    
        return true;
    }
    
    int main() {
        int n;
        cin >> n;
        vector<string> input_strings(n);
        for (int i = 0; i < n; ++i) {
            cin >> input_strings[i];
        }
    
        vector<string> real_strings;
        unordered_set<string> real_strings_set;
    
        for (const auto &s : input_strings) {
            vector<string> parts = split_string(s);
            string sorted_s;
            for (const auto &p : parts) {
                sorted_s += p + "_";
            }
            sort(sorted_s.begin(), sorted_s.end());
    
            if (real_strings_set.find(sorted_s) == real_strings_set.end()) {
                real_strings_set.insert(sorted_s);
                real_strings.push_back(s);
            }
        }
    
        cout << real_strings.size() << endl;
        for (const auto &s : real_strings) {
            cout << s << endl;
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 修改了问题 4月14日
  • 创建了问题 4月14日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题