gpt4 book ai didi

c++ - 链接节点列表,分段 FAULT

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:38 27 4
gpt4 key购买 nike

我想创建一个链接节点列表。这个想法是用字母分隔一个单词,并通过每个不同的字母创建一个链接节点列表。我也尝试在最后一个位置添加最后一个节点。

我已经尝试了很多东西,理论上是可行的,但我找不到段错误的根源。

    struct nodo{
int frecuencia;
nodo *next;
char letra;
};

int main(){

string recibir; cin>>recibir; // recibir is the input.
nodo *n;
for(size_t i=0;i< recibir.size();i++){
agregarnodoalista(n,recibir[i]);}

添加节点到列表功能:(如果存在相同字母的节点,则在频率上加+1)。

void agregarnodoalista(nodo *&n, char caracter){
if(buscarletra(n,caracter)) localizarnodo(n,caracter)->frecuencia++;
else{
nodo *nodito;
nodito= new nodo;
nodo *ptr;
while(ptr->next!=NULL){
ptr=ptr->next;
}
ptr->next = nodito;
nodito->letra=caracter;
}}

在列表中查找字母并说明它是否存在。功能:

bool buscarletra(nodo *n, char letrita){
nodo *ptr;
for(ptr=n; ptr!=NULL;ptr=ptr->next){
if(ptr->letra==letrita) return true;}
return false;}

返回包含字母的指针的节点。

nodo *localizarnodo(nodo *n, char letrita){
nodo *ptr;
for(ptr=n; ptr!=NULL; ptr=ptr->next){
if(ptr->letra==letrita) return ptr;
}
return NULL;}

你能帮我一些忙吗?

最佳答案

如评论中所述,您正在访问未初始化的指针,这是未定义的行为。此代码应该可以工作,但您有内存泄漏。我没有检查您可能遇到的其他潜在问题。

#include <iostream>
#include <string>
using namespace std;

struct nodo {
int frecuencia;
nodo *next;
char letra;
};

bool buscarletra(nodo* n, char letrita) {
nodo *ptr = n;
for (; ptr != NULL; ptr = ptr->next) {
if (ptr->letra == letrita)
return true;
}
return false;
}

nodo *localizarnodo(nodo *n, char letrita) {
nodo *ptr;
for (ptr = n; ptr != NULL; ptr = ptr->next) {
if (ptr->letra == letrita) return ptr;
}
return NULL;
}

void agregarnodoalista(nodo *n, char caracter) {
if (buscarletra(n, caracter)) localizarnodo(n, caracter)->frecuencia++;
else {
nodo *nodito;
nodito = new nodo;
nodo *ptr = new nodo;
while (ptr->next != NULL) {
ptr = ptr->next;
}
ptr->next = nodito;
nodito->letra = caracter;
}
}

int main() {

string recibir;
cin >> recibir; // recibir is the input.
nodo* n = new nodo;
for (size_t i = 0; i < recibir.size() - 1; i++) {
n->letra = recibir[i];
nodo* next = new nodo;
n->next = next;
n = n->next;
}
n->letra = recibir[recibir.size() - 1];
n->next = NULL;
for (size_t i = 0; i < recibir.size(); i++) {
agregarnodoalista(n, recibir[i]);
}
}

关于c++ - 链接节点列表,分段 FAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56509664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com