lengshizai 2024-02-18 20:34 采纳率: 31.7%
浏览 14
已结题

C++遍历内存并匹配信息

直接上代码,请仔细阅读代码并理解需求,谢谢。


//假定在链表中遍历字符串,字符串形式不定,但仅限于
//①:英文字符串 ②汉字支付串 ③数字  ④ 特殊符号 ⑤ 前者参杂 ;eg:old男孩_1号

static 字符串匹配遍历(std::string  目标字符串);

DWORD FuncTion::字符串匹配遍历(std::string  目标字符串)
{
    int 节点数量 = 5;//假定链表节点数量=5,这个不重要
    DWORD 链表节点 = *(DWORD*)(0x12345678);
    DWORD 返回值 = 0;
    for (int i = 0; i < 节点数量; i++)
    {    //以下是问题代码:

            std::string 支付串名称 = (CHAR*)(链表节点);
            printf("%d    %s\n", i, 支付串名称.c_str()); 
            if (支付串名称.c_str() == 目标字符串);
            {

                printf("NumBer:%d Matched%s\n",i, 支付串名称.c_str());
                
                return 1;//表示匹配成功,可以入库
            }

        //以上是问题代码;

            链表节点 = *(DWORD*)(链表节点);
    }
    return 0;//表示匹配失败,请提供证明信息;
}

FuncTion::字符串匹配遍历("我爱中国");
FuncTion::字符串匹配遍历("我爱中国XXX");
FuncTion::字符串匹配遍历("我爱China");

//需求  修改并解释相关代码
//如采用QT等  可以将参数改为 QString 目标字符串
//假定地址可用,不用纠结链表  只是个形式  ,就是匹配过程 不懂 还是我之前提的问题  数据匹配与格式转换
  • 写回答

13条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2024-02-18 20:35
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,您可以参考如下,如果回答的不正确,及时评论区回复我,我会根据你错误描述追加回复。如果解决了您的问题,麻烦帮我点击个采纳!谢谢您的肯定!

    首先,我们需要明确一些问题:

    1. 链表节点应该包含指向字符串的指针,而不是整个字符串。
    2. 使用==来比较两个字符串是否相等是错误的,应该使用std::stringcompare函数或==运算符(对于QString)。

    下面是修改后的C++代码,使用了std::string。如果你希望使用QString,只需将所有std::string替换为QString,并相应地调整构造函数和比较操作。

    #include <iostream>
    #include <string>
    
    class FuncTion {
    public:
        static bool 字符串匹配遍历(const std::string& 目标字符串, DWORD* 链表节点, int 节点数量) {
            DWORD 返回值 = 0;
            for (int i = 0; i < 节点数量 && !返回值; i++) {
                const char* 支付串名称 = reinterpret_cast<const char*>(链表节点[i]);
                std::cout << "Node: " << i << " " << 支付串名称 << std::endl;
    
                if (目标字符串 == 支付串名称) {
                    std::cout << "Number: " << i << " Matched " << 支付串名称 << std::endl;
                    返回值 = 1;
                }
            }
            return 返回值;
        }
    };
    
    int main() {
        DWORD 链表节点[] = {
            reinterpret_cast<DWORD>("old"),
            reinterpret_cast<DWORD>("男孩"),
            reinterpret_cast<DWORD>("_1号"),
            reinterpret_cast<DWORD>("我爱中国"),
            reinterpret_cast<DWORD>("其他字符串")
        };
    
        FuncTion::字符串匹配遍历("我爱中国", 链表节点, sizeof(链表节点) / sizeof(DWORD));
        FuncTion::字符串匹配遍历("我爱中国XXX", 链表节点, sizeof(链表节点) / sizeof(DWORD));
        FuncTion::字符串匹配遍历("我爱China", 链表节点, sizeof(链表节点) / sizeof(DWORD));
    
        return 0;
    }
    

    这段代码中,我们用一个数组模拟了链表,并传递了一个指向该数组的指针和元素个数。我们还修复了字符串比较的问题。请注意,这只是一个简单的示例,实际项目中需要处理更复杂的情况,例如动态链表、异常安全性和内存管理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3