资源简介
统计文件中的所有字符串出现的次数,在行尾未完的字符用"-"连接,c语言编写,包括"rdline.c","abc",编译"rdline.c"后直接,运行就行,不要加参数,会自动读取"abc"中的内容。
代码片段和文件信息
/* 统计一个文件中字符串出现的次数,字符串间出空格分隔
* 行尾未完的字符用字符“-”连接,
* 标点符号的左右都要求有空格
* 注:不能处理包含中文的文件
*/
#include
#include
#include
#include
struct kv //key-value
{
char *p;
int count;
};
struct kv_head
{
int len;
struct kv *pnode;
};
struct kv_head listHead;
struct kv node[200];
int findindex(char *pwordstruct kv_head* phead)
{
int index=0;
int ret=-1;
for(index=0;index < phead->len;index++)
{
ret = strcmp(pwordphead->pnode[index].p);
if (ret == 0)
break;
}
if (ret == 0)
return index;
return -1;
}
int
main()
{
listHead.len=0;
listHead.pnode=node;
FILE *fp;
char readbuff[200];
char wordbuff[30];
char wordbuff2[30];
char *pread*p2*pend*ptmp*ptmp2;
int lenindexflag=0;
int part1len=0;
int existindex=-1;
int lentmp;
fp = fopen(“./abc““r+“);
while( !(feof(fp)) )
{
readbuff[0]=‘\0‘;
fgets(readbuff200fp);
if (readbuff[strlen(readbuff)-2] != ‘-‘)
{
lentmp=strlen(readbuff);
readbuff[strlen(readbuff)]=‘\n‘;
readbuff[lentmp-1]=‘ ‘;
readbuff[lentmp + 1]=‘\0‘;
}
pread = readbuff;
ptmp=readbuff;
ptmp2=readbuff;
while(*pread == ‘ ‘ || *pread == ‘\t‘)
pread++;
#if 1
if (flag == 1)
{
p2=pread;
pread=strchr(pread‘ ‘);
memcpy(wordbuff + part1lenp2pread-p2);
*(wordbuff+part1len+ (pread-p2)) = ‘\0‘;
if ((existindex = findindex(wordbuff&listHead)) >= 0)
{
listHead.pnode[existindex].count++;
existindex = -1;
goto out1;
}
listHead.pnode[listHead.len].p=(char *)malloc(strlen(wordbuff) + 1);
memcpy(listHead.pnode[listHead.len].pwordbuffstrlen(wordbuff));
*(listHead.pnode[listHead.len].p + strlen(wordbuff))=‘\0‘;
listHead.pnode[listHead.len].count=1;
listHead.len++;
out1:
while(*pread == ‘ ‘)
pread++;
// pread+=1;
}
if ((ptmp = strrchr(ptmp‘-‘)) != NULL)
{
pend=strrchr(ptmp2‘ ‘);
flag=1;
memcpy(wordbuffpend+1ptmp-pend-1);
part1len = ptmp-pend-1;
}
else
flag=0;
///temp end;
p2 = pread;
while ((pread=strchr(pread‘ ‘)) != NULL)
{
len = pread - p2;
memcpy(wordbuff2p2len);
wordbuff2[len]=‘\0‘;
if ((existindex = findindex(wordbuff2&listHead)) >= 0)
{
listHead.pnode[existindex].count++;
existindex = -1;
goto out2;
}
listHead.pnode[listHead.len].p=(char *)malloc(len * sizeof(char) + 1);
memcpy(listHead.pnode[listHead.len].pp2len);
*(listHead.pnode[listHead.len].p + len)=‘\0‘;
listHead.pnode[listHead.len].count=1;
listHead.len++;
out2:
// p2 = pread + 1;
// pread+=1;
while(*pread == ‘ ‘)
pread++;
p2=pread;
}
#endif
}
index = 0;
while (index {
printf(“word %d :%s\t%d\n“indexlistHead.pnode[index].plistHead.pnode[index].count);
index++;
}
return 0;
}
- 上一篇:MFC制作可编辑闹钟
- 下一篇:编译原理消除无用产生式的文法化简
相关资源
- C++头文件转delphi工具 + 源码
- 操作系统c语言模拟文件管理系统844
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- VC++ 多线程文件读写操作
- c语言字符串分割截取子串查找插入删
- 文件传输和聊天程序(c语言实现)
- C语言中 文件读取和写入的详细操作代
- 基于STM32F407ZG的监控摄像头及FATFS文件
- 51单片机protues文件(KST-51.DSN)
- PE文件操作代码
- 基于CS的TCP文件传输程序设计
- windows网络编程_文件传输
- 微型文件系统源码(FatFs)
- diy写字机grbl v1.1源代码
- Hex文件转bin文件
- stm32 实现Fatfs对U盘文件操作(main.c)
- c++ 文件操作(读取、写入)
- dll依赖文件检测工具
- QT 计算文件夹内所有代码行数
- 16进制字符串转字节数组
- C++Builder XE7 update1 和谐文件亲测可用
- c++实现的文件上传服务器
- 一个C++实现的源代码行数统计工具
- 标准的MD5源码md5.cmd5.h使用说明文件
- C语言math.h文件使用说明及相应程序
- ffmpeg推流视频文件到rtmp服务器
- C语言解惑—指针、数组、函数和多文
- C++ 读取excel2007文件,转成lua文件
- 通达信day格式文件转换含港股和基金
川公网安备 51152502000135号
评论
共有 条评论