从文件中读取文本

时间:2009-05-19 11:29:51

标签: c++ string parsing file-io

我想从文件中读取文字。例如:     HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE

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

4 个答案:

答案 0 :(得分:7)

一步一步地采取行动。

你需要:

  1. 打开文件
  2. 从文件中读取数据
  3. 每隔5个符号进行一次检索
  4. 如果该符号为E,则递增计数器。
  5. 首先解决第一部分,然后解决第二部分,依此类推。如果您在特定阶段遇到任何问题,请在此处发布一些代码,概述您希望看到的内容以及您所看到的内容,我们将为您提供帮助。

答案 1 :(得分:3)

是的,我估计是的功课。如果你不得不问这个问题那么你真的需要从基础开始。当你遇到更难的主题时,询问其他人怎么做会使你瘫痪。对不起,这是我能给出的最佳答案。

答案 2 :(得分:3)

因为这听起来像是家庭作业,所以它只是来自我的算法。

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

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

每当角色为“E”时,位置变量为五的倍数,请递增计数。

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

<强>更新

根据要求,这里有一些代码可以证明我的意思。既然你没有提供任何你自己尝试过的迹象,我就是用标准C而不是C ++来做的,我没有添加任何评论。

但是我已经输入了足够的调试内容,所以你可以在输出中看到我的意思(见下文)。你还有一些工作要做,但是,如果你发布自己的尝试,你会得到更多的帮助。

请不要试图将这项工作作为您自己的工作。毫无疑问,你的教育工作者能够和你一样看到这些代码(因此,如果这确实是类作,你失败)并且你应该使用C ++结构进行输入和输出(iostreams而不是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..."。第二行的符号是:

  • "-"表示E不在第5个字符位置。
  • "|"表示不是E的第5个字符位置。
  • "*"表示第5个角色的E
  • " "其他一切。

答案 3 :(得分:3)

#!/bin/ksh
E=`echo "HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE" | cut -c 5,10,15,20,25,30,35,40 | sed 's/[^E]//g'`
echo ${#E}

你会学会问一个具体的问题。

;-)基思。