繁体   English   中英

从文件中读取文本

[英]read text from file

我想从文件中读取文本。 例如:HHEEHEHHEEHHEEEEHHEEHEHHEHEEEEEEHHHHEEE

我想计算每5个符号中有多少个“ E”?

逐步进行。

你需要:

  1. 开启档案
  2. 从文件中读取数据
  3. 每5个符号返回一次
  4. 如果该符号是E,则增加一个计数器。

因此,首先解决第一部分,然后解决第二部分,依此类推。 如果您在给定阶段遇到任何问题,请在此处发布一些代码,概述您希望看到的内容以及所看到的内容,我们将为您提供帮助。

是的,我认为是家庭作业。 如果您必须问这个问题,那么您确实需要从基础开始。 当您遇到较难的话题时,问别人该怎么做会使您瘫痪。 抱歉,这是我能给的最好的答案。

由于这听起来像作业,所以它只是我的算法。

您需要将位置和计数变量都初始化为0,然后开始逐个字符读取字符(每个字符递增位置变量)。

读取字符意味着打开文件一次,然后为每次读取执行一个循环,然后在检测到文件结束时关闭文件。

每当字符为“ E” 位置变量为5的倍数时,请递增计数。

读取所有字符后,输出计数。

更新:

根据要求,这里有一些代码演示了我的意思。 由于您没有提供任何表明您自己尝试过的指示,因此我使用标准C而不是C ++进行了此操作,并且未添加任何注释。

但是我已经放入了足够的调试资料,因此您可以在输出中看到我的意思(见下文)。 您仍然需要做一些工作来理解它,但是,如果您发表自己的尝试,将会获得更多帮助。

请不要试图把这项工作当做自己的事来进行。 您的教育工作者无疑将能够和您一样看到此代码(因此,如果这确实是课堂工作,那么您将会失败),并且应该将C ++构造用于输入和输出(iostream而不是stdio.h)。

#include <stdio.h>

char buff0[1000];
char buff1[1000];

int main (int argc, char *argv[]) {
    FILE *fin;
    int chPos;
    int chVal;
    int count;

    fin = fopen ("qq.in", "r");
    if (fin == NULL) {
        fprintf (stderr, "Cannot open qq.in\n");
        return 1;
    }

    *buff0 = '\0';
    *buff1 = '\0';
    count = 0;
    chVal = fgetc (fin);
    chPos = 0;
    while (chVal != EOF) {
        putchar (chVal);
        sprintf (&(buff1[strlen(buff1)]),"%c",chPos+'1');
        if ((chPos == 4) && (chVal == 'E')) {
            sprintf (&(buff0[strlen(buff0)]),"%c",'*');
            count++;
        } else {
            if (chPos == 4) {
                sprintf (&(buff0[strlen(buff0)]),"%c",'|');
            } else {
                if (chVal == 'E') {
                    sprintf (&(buff0[strlen(buff0)]),"%c",'-');
                } else {
                    sprintf (&(buff0[strlen(buff0)]),"%c",' ');
                }
            }
        }            chVal = fgetc (fin);
        chPos = (chPos + 1) % 5;
    }
    printf ("%s\n",buff0);
    printf ("%s\n",buff1);

    fclose (fin);

    printf ("There were %d occurrence(s)\n", count);

    return 0;
}

这是输出:

HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE
  --|-  -*   -*-   *- - |- --*--- |  --*
12345123451234512345123451234512345123451
There were 5 occurrence(s)

它有一个名为qq.in文件,其中包含您的输入字符串"HHEEHEHH..." 第二行上的符号是:

  • "-"表示不在第5个字符位置的E
  • "|" 对于不是E的第5个字符的位置。
  • "*"表示第5个字符位置的E
  • " "用于其他所有内容。
#!/bin/ksh
E=`echo "HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE" | cut -c 5,10,15,20,25,30,35,40 | sed 's/[^E]//g'`
echo ${#E}

这将学问一个特定的问题。

;-)基思。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM