簡體   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