我正在尝试这个程序,它要求我们以各种方式更改一个单词。
例如,如果我们收到"MISSSIPPI"那么输出应该是
MISP(不重复出现的顺序)
ISPM(频率)
IMPS(字母顺序)
我能够按照字母顺序进行编码,也可以按照出现的顺序进行编码。我能够成功地运行字母顺序函数,但当它遇到CODEBLOCKS上的顺序函数时,代码有点挂起。
void ord()
{
current = head1 ;
while(current != NULL)
{
current1 = current -> next ;
while(current1 != NULL)
{
if(current1 -> data == current -> data)
{
free(current1);
current1 = current1 -> next ;
}
else
current1 = current1 -> next ;
}
current = current -> next ;
}
ptr = head1 ;
while(ptr != NULL)
{
printf("%c" , ptr->data) ;
ptr = ptr -> next ;
}
}
在这个函数中,current指向列表的头部,而current one指向头部的下一个。我增加当前值,并释放具有重复字母表的节点。我的问题是为什么代码必须停止?也为频率的事情提出一些逻辑。
提前感谢
我想问题出在这里。
if(current1 -> data == current -> data)
{
free(current1);
current1 = current1 -> next ;
}
在这里,你释放current1,然后推进它。
我的建议是,你应该使用一个临时指针来保持"current1"的位置,然后推进它或任何需要的东西。
MISP(不重复出现的顺序)
错误为:
if(current1 -> data == current -> data)
{
free(current1); // use a temporary varaible and move to next node and free
current1 = current1 -> next ;
}
ISPM(频率):想法很快。
取一个26大小的数组(因为字母表是26。例如:count[26]
)
- 通过遍历链接列表来增加相应的字母表元素
- 在遍历结束时,您将看到数组中出现的次数
例如元素A->增量A[0]++;