【问题标题】:Comparing the first and third character of a string比较字符串的第一个和第三个字符
【发布时间】:2020-06-21 03:27:36
【问题描述】:

我有一个包含这种格式数据的 .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.9467AxCb: 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);
}

有人可以帮我吗?

【问题讨论】:

  • 您需要什么帮助? 具体
  • 也许是if (tmpstr[0] == prefix2char[0] &amp;&amp; tmpstr[2] == prefix2char[1])
  • 在帖子中,有一段是我写的我想在程序中更改的内容如下:我需要这方面的帮助
  • @Eraklon 给你答案
  • 下次最好在问题文本本身出现问题时提及。 “code code code codeCan someone help me?”可能会导致不好的第一印象......

标签: c arrays string split substring


【解决方案1】:

只需将当前行的第一个字符与子字符串的第一个字符进行比较,并将当前行的第 3 个字符与子字符串的第 2 个字符进行比较。像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多