#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAXSIZE 20
typedef struct node{
int count;
char s[MAXSIZE];
struct node *next;
}list,*linkP;
FILE *fp;
linkP L = (linkP)malloc(sizeof(list));
linkP deal(char temp[],char line[]);
linkP search(char temp[],linkP L);
void PrintList(linkP L);
linkP sort(linkP L);
int main(void){
fp = fopen("article.txt","r");
L->next = NULL;
char line[MAXSIZE];
char temp[MAXSIZE];
memset(temp,0,MAXSIZE);
while(fgets(line,1024,fp)!=NULL){
L = deal(temp,line);
}
L = sort(L);
PrintList(L);
return 0;
}
linkP deal(char temp[],char line[]){
int i,k=0;
char ch;
for(i=0;i<strlen(line);i++){
ch = tolower(line[i]);
if(ch>='a'&&ch<='z'){
temp[k] = ch;
k++;
}
else{
if(temp[0]==0){
continue;
}
else{
L = search(temp,L);
memset(temp,0,MAXSIZE);
k = 0;
continue;
}
}
}
return L;
}
linkP search(char temp[],linkP L){
linkP p,q;
int flag = 0;
p = L;
while(p){
if(strcmp(temp,p->s)==0){
p->count++;
flag = 1;
break;
}
p = p->next;
}
if(flag==0){
p = L;
while(p->next){
p = p->next;
}
q = (linkP)malloc(sizeof(list));
strcpy(q->s,temp);
q->next = NULL;
q->count = 1;
p->next = q;
p = q;
}
return L;
}
void PrintList(linkP L){
linkP p;
p = L->next;
while(p){
printf("%s %d\n",p->s,p->count);
p = p->next;
}
}
linkP sort(linkP L){
linkP p,q;
char s[MAXSIZE];
int temp;
for(p=L;p;p=p->next){
for(q=p;q;q=q->next){
if(strcmp(p->s,q->s)>0){
strcpy(s,p->s);
strcpy(p->s,q->s);
strcpy(q->s,s);
temp = p->count;
p->count = q->count;
q->count = temp;
}
}
}
return L;
}
8 个解决方案
#1
单步调试 ,找到报错的代码,分析代码
#2
我单步调试可以调试到最后的return 0,然后再走一步就会报错
#3
那是不是那里申请了空间,没有释放?
#4
在调试下运行,出错时可以断下来,通过调用堆栈、变量窗口等观察分析出错原因
#5
查看cpu窗口
然而我还看不懂汇编 请教大神是哪里错了QAQ
然而我还看不懂汇编 请教大神是哪里错了QAQ
#6
整个程序申请的空间并没有临时用来存储的,都是在最后的链表中啊
#7
感谢各位!问题我已经找到了,是一开始的#define MAXSIZE 太小了 line[]那个要开大一点,不过速度太慢 还需要找优化的方法
#8
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,
看不懂时双击下一行,直到能看懂为止。
#1
单步调试 ,找到报错的代码,分析代码
#2
我单步调试可以调试到最后的return 0,然后再走一步就会报错
#3
我单步调试可以调试到最后的return 0,然后再走一步就会报错
那是不是那里申请了空间,没有释放?
#4
在调试下运行,出错时可以断下来,通过调用堆栈、变量窗口等观察分析出错原因
#5
查看cpu窗口
然而我还看不懂汇编 请教大神是哪里错了QAQ
然而我还看不懂汇编 请教大神是哪里错了QAQ
#6
我单步调试可以调试到最后的return 0,然后再走一步就会报错
那是不是那里申请了空间,没有释放?
整个程序申请的空间并没有临时用来存储的,都是在最后的链表中啊
#7
感谢各位!问题我已经找到了,是一开始的#define MAXSIZE 太小了 line[]那个要开大一点,不过速度太慢 还需要找优化的方法
#8
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,
看不懂时双击下一行,直到能看懂为止。