c++与预想输出不一样


#include<iostream>
#include<string.h>
using namespace std;
int length(char str[]){
    return strlen(str);
}
int isletter(char a){
    if(a >= 'a'&&a <= 'z'){
        return 1;
    }else{
        return 0;
    }
}
int isnum(char a){
    if(a-'0' >= 0&&a-'0' <= 9){
        return 1;
    }else{
        return 0;
    }
}
int main(){
    char inp[99999];
    cin >> inp;
    int pos = 0;
    while(pos < length(inp)){
        if(inp[pos] == ' '){
            pos++;
            continue;
        }
        if(isletter(inp[pos]) == 1){
            char words[99999];
            int wpos = 0;
            while(isletter(inp[pos]) == 1){
                words[wpos] = inp[pos];
                pos++;
                wpos++;
            } 
            cout << words;
            cout << endl;
            continue;
        }
        if(isnum(inp[pos]) == 1){
            char nums[99999];
            int npos = 0;
            while(isnum(inp[pos]) == 1){
                nums[npos] = inp[pos];
                pos++;
                npos++;
            }
            cout << "nums:" << nums;
            cout << endl;
            continue;
        }
    }
    int b;
    cin >> b;
    return 0;
}

这是做的一个分词器
运行结果却与预想不一样

img

没初始化nums,而nums复用了words的内存,打印下地址就知道是同一个了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7628898
  • 这篇博客你也可以参考下:C++ 静态数据成员与静态函数成员实例 友元函数实例 动态分配内存实例
  • 除此之外, 这篇博客: C++通过下标方法访问数组内元素中的 一、指针的声明与初始化 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    //定义一个指针指向int型数组
    方法一:使用new方法 int * ledstate1 = new int[4];
    方法二:
    int led[4] = {0};//先声明一个数组
    int * ledstate1=led;//将数组直接复制给指针
    
  • 您还可以看一下 夏曹俊老师的C++微服务架构及安全云盘项目实训课程中的 完成了客户端的文件上传指令处理小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我作为一名IT专家,对于c++分词器调试有一些经验和建议:

    1. 首先,需要明确预期输出和实际输出不同的具体表现形式,比如输出结果错误、程序崩溃等,才能更准确地找到问题所在。
    2. 接着,需要仔细检查代码中的各种细节,比如变量命名和类型是否正确、代码逻辑是否合理、是否有未处理的异常情况等。
    3. 可以使用一些常见的调试工具,比如gdb、valgrind等,可以从内存管理、代码执行过程等方面来分析并解决问题。
    4. 如果有必要,可以在代码中加入一些调试信息,比如中间变量的值、程序执行到哪一步等,帮助定位问题。
    5. 可以借鉴一些优秀的分词器的设计思路和实现方式,比如jieba分词器等。
    6. 最后,如果以上方法都不能解决问题,可以借助一些在线论坛或是向一些专业的程序员求助,共同解决问题。

    需要注意的是,对于具体如何解决问题,需要先明确问题所在,才能有针对性地解决。如果我无法了解具体问题所在,就很难提供有效的解决方法。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^