| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 759 人关注过本帖
标题:请问怎么在txt中统计某一字符串出现的次数并输出呢?
只看楼主 加入收藏
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
  问题点数:0  回复次数:6   
请问怎么在txt中统计某一字符串出现的次数并输出呢?
我可以打开或创建一个txt文件并在其中添加新的文本,能显示文本的内容,请问怎么在txt中统计某一字符串出现的次数并输出呢?


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>


void menu();
void wenben();


main()
{  

    menu();

}


void menu()
{
    FILE *aa, *ab;
    char filename[30];
    char a[2]; //输入字符选项需要多一个字符位吸收输入的回车键
    for(;;)
    {
        printf("输入1开始文本编辑\n输入2或者右上角点X关闭\n");
        gets(a);
        if(a[0]=='1'){system("cls"); wenben();    }
        if(a[0]=='2') return 0;
        else system("cls");
        
    }

}

    void wenben()
{    char e;
    int f=0,g=0,h=0,k=0,i=0,n=1,o=0,p=0;//f计数空格,g计数英文,h计数数字,k计数全部字符数量,i计算特定字符串长度,n对比字符内容
    char b[2],c[80],l[80],m[80];//b为文本编辑的选项,c是每行输入的字符串,l是用来查找特定字符串数量的字符串,m是对比的
    char d[]="^^";
    FILE *aa, *ab;
    char filename[30];
    printf("输入需要编辑的文本名,将以可读写的方式打开或者创建\n");
    gets(filename);
    strcat(filename,".txt");
    aa=fopen(filename,"a+");//到这里打开或者创建文本


    if(!aa)
    {   
        system("cls");
        printf("打开或创建失败\n");
        wenben();//重新打开或创建,起个别的名字
    }
    if(aa)
    {
        system("cls");
        printf("打开或创建成功\n");
    }


    for(;;)
    {
        printf("输入1在文本添加字符\n输入2退出\n输入3显示文本内全部字符\n输入4统计字符串在文章中出现的次数\n");//文本编辑的功能
        gets(b);
        if(b[0]=='1')//从文本的末尾添加字符
    {
    printf("每次最多输入80个字符,输入^^停止输入\n");
    for(;;)
    {
    gets(c);
   
    if (strcmp(c,d)==0)
    {    fclose(aa);//操作以后关闭文件,避免丢失数据
        break;
    }//输入的字符串为^^,与函数内保存的一样,停止输入
    aa=fopen(filename,"a+");
    fputs(c,aa);
    fprintf(aa,"\n");
    fclose(aa);
    }
    }
    if (b[0]=='2') break;//退出文本编辑,可以打开或创建其它文本继续文本编辑,也可以关闭程序
    else system("cls");
    if (b[0]=='3') //读取显示全部文本..
    {
        system("cls");
        fclose(aa);
        aa=fopen(filename,"r");//打开文件以后从文本的第一个字符开始读取字符
        e=fgetc(aa);
        while (e!=EOF)
        {   
            if (e!='\n') k++;//去掉每次输入之后的输入到文本里的换行符
            if (e==32) f++;
            if (65<=e&&e<=90||97<=e&&e<=122) g++;
            if (48<=e&&e<=57) h++;
            putchar(e);
            e=fgetc(aa);
        }
        fclose(aa);
    printf("\n空格数%d\n",f);f=0;
    printf("字母数%d\n",g); g=0;
    printf("数字数%d\n",h);h=0;
    printf("总字数%d\n\n",k);k=0;

    }
    if (b[0]=='4') //这个想不出来,我只会一个一个显示txt内的字符
    {
        printf("输入需要统计的字符串,因为分行输入,所以需要统计的字符串最多长80个字符\n");//文本内的字符串统计
        gets(l);
        i=strlen(l);
        printf("%d\n",i);
        aa=fopen(filename,"r");
        e=fgetc(aa);
        while (e!=EOF)
        {   
            
            putchar(e);
            e=fgetc(aa);
        }

fclose(aa);


     

        printf("%d\n",o);

   
    }

    }   
}


我想的是验证当前字符与输入的特定字符串的第一个字符是否相同,如果相同就将这个字符与文本的后i-1个字符放到一个长80位的字符串里然后与特定字符串进行对比前i位的字符,如果相同就计数加1,然后从当前字符的下一位或者下i-1位继续对比都行..可是我不会做,凄凉,能不能教我怎么写这个代码啊,蟹蟹!我太菜了(╥╯^╰╥)
2018-06-14 12:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:160
帖 子:6210
专家分:27226
注 册:2014-5-20
  得分:0 
strstr()搜寻
2018-06-14 13:20
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
  得分:0 
回复 2楼 吹水佬
蟹蟹!但是不知道应该怎么做,想不到思路,额,我只有一个字符串..需要对比的在txt里-_-||

[此贴子已经被作者于2018-6-14 15:27编辑过]


碧蓝航线真好玩
2018-06-14 15:21
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5005
专家分:13968
注 册:2016-10-22
  得分:0 
回复 3楼 y529879803
不是把字符串读进数组里面么,这是种最直接的做法~
当然用fgets每次读取一行比对也是可以的

统计次数可以用二楼所说的strstr,然后下次从上一次strstr返回的指针开始+1就可以了~

[此贴子已经被作者于2018-6-14 18:15编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-06-14 18:13
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
  得分:0 
回复 4楼 九转星河
我就是,不会写...,我既不会把txt里的东西从第一个字符开始读入字符串,到\n清空字符串继续读,也不会strstr()那个计数..惨烈

[此贴子已经被作者于2018-6-14 18:27编辑过]


碧蓝航线真好玩
2018-06-14 18:26
星系隐
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-6-16
  得分:0 
回复 4楼 九转星河
#include<stdio.h>  
#include<string.h>  
int main()  
{  
    FILE *fp;       //文件指针  
    char find_str[100]; //存储字符串的数组  
    int line=0;      
    char file_str[1024];  
    fp=fopen("d:\\test.txt","r");//创建的文件  
    if(fp==NULL)  
    {  
        printf("open error\n");  
        return -1;  
    }  
    printf("input string to find:");  
    gets(find_str);     //获取输入的字符串  
    while(fgets(file_str,sizeof(file_str),fp))//逐行循环读取文件,直到文件结束   
    {  
        line++;  
        if(strstr(file_str,find_str))  //检查字符串是否在该行中,如果在,则输出该行  
        {  
            printf("%s in %d :%s\n",find_str,line,file_str);  
            //fclose(fp);  
            //return 0;  
        }  
    }  
    fclose(fp);//关闭文件,结束  
    printf("not found str:%s\n",find_str);  
    return -1;  
}  

这个可以每行检验一次特定字符串,但是我也不会从上次strstr();返回的指针加1继续strstr();能不能说一下返回指针加1继续strstr();怎么做啊?
2018-06-16 00:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:160
帖 子:6210
专家分:27226
注 册:2014-5-20
  得分:0 
#include <stdio.h>
#include <string.h>

main()
{
    char *str="abcabcdabcde", *s="abc", *p;
    for (p=strstr(str,s); p; p=strstr(++p,s))
        printf("%s\n", p);
}

2018-06-16 04:32







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023146 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved