Сравнение первого и третьего символа строки - PullRequest
1 голос
/ 09 марта 2020

У меня есть файл .txt, содержащий данные в этом формате:

AxCs: 0,9467,
FyHd: 0,9489,
AzCf: 0,78973,
DhBh: 0,8874,
JyLt: 0,64351,
AxCb: 0,8743,

и т. Д. *

У меня есть программа C, которая получает в качестве входных данных подстроку (e.g "Ax") и возвращает все строки, содержащие эту подстроку (e.g "AxCs: 0.9467", "AxCb: 0.8743") и среднее их числовых значений.

Более точно: Программа получает (от терминала) 3 параметра:

  1. programname.exe
  2. filetoread.txt
  3. substring

И выводит:

  1. Переданная подстрока
  2. Количество строк, соответствующих подстроке
  3. Среднее из всех числовых значений совпавших строк

В программе я хочу изменить следующее: Когда я передаю два символа, я хочу получить совпадение, если первый и третий символы каждой строки в .txt совпадают с переданными. (например, если я передаю "AC", AxCs: 0.9467 и AxCb: 0.8743 должны совпадать).

Это код:

#include <stdio.h>
#include <string.h>

#define MAXC 1024

int main (int argc, char **argv) {

    char buf[MAXC] = "", *str = NULL;   /* buffer for line and ptr to search str */
    size_t n = 0, len = 0;              /* counter and search string length */
    double sum = 0;                     /* sum of matching lines */
    FILE *fp = NULL;                    /* file pointer */
    char tmpstr[8];

    if (argc < 3) { /* validate 2 arguments given - filename, search_string */ 
        fprintf (stderr, "error: insufficient number of arguments\n"
                "usage: %s filename search_string\n", argv[0]);
        return 1;
    }

    if (!(fp = fopen (argv[1], "r"))) { /* open/validate file open for reading */
        perror ("fopen-filename");
        return 1;
    }
    str = argv[2];                      /* set pointer to search string */
    len = strlen (str);                 /* get length of search string */

    prefix2char = argv[2];
    len = strlen(prefix2char);    

    while (fgets (buf, MAXC, fp)) {             /* read each line into buf */

        memcpy(tmpstr, buf, 4);
        tmpstr[4] = 0;

        if (strstr(tmpstr, prefix2char)) { /* HERE IS THE PROBLEM: I should check the first and the third char */
            double tmp;

            if (sscanf (buf, "%*1023[^:]: %lf", &tmp) == 1) {
                sum += tmp;
                n++;
            }
        }
    }

    if (n)  /* if values found, output average */
        printf ("prefix '%s' avg: %.4f\n", str, sum / n);
    else    /* output not found */
        printf ("prefix '%s' -- not found in file.\n", str);
}

Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 09 марта 2020

Просто сравните первый символ текущей строки с первым символом подстроки, а третий символ текущей строки со вторым символом подстроки. Вот так:

if (tmpstr[0] == prefix2char[0] && tmpstr[2] == prefix2char[1])
...