在C程序中的txt文件的一行中搜索2个不同的单词

时间:2017-02-28 17:33:35

标签: c string search

我是C的新手,我获得了一个包含以下数据的.txt文件:

  1. ID日期时间名称国家/地区
  2. 43 12/2 01:18 Amy AB
  3. 347 12/12 12:30 Amy BC
  4. 95 10/1 10:00 Bob AB
  5. ...
  6. 名称将仅等于Amy / Bob / Cathy和

    国家/地区将仅等于AB / BC / BD / DE

    我需要阅读文件并执行以下操作:

    示例1,我需要在.txt文件中搜索country = AB的Amy并计算满足这种情况的数据量

    示例2,搜索具有country = DE和count

    的Amy

    我不知道如何同时检查姓名和国家/地区,这是我的代码:

    #include <stdio.h>
    #include <string.h>
    int main(){
        int i;
        char s[10];
        while(scanf("%s", s)==1){
             if (strcmp(s,"Amy")==0){
                 if (strcmp(s,"AB")==0){
                     ++i;
                 }
             }        
        }
    

    我认为第二个不应该使用s来与“AB”进行比较,但我该怎么办? 请帮助和谢谢!

1 个答案:

答案 0 :(得分:1)

假设您的行总是采用以下格式:

scanf

您可以使用scanf("%*d %*d/%*d %*2d:%*2d %s %s", name, country); 来解析该行:

name

countryconst char* s = "43 12/2 01:18 Amy AB"; char name[16]; char country[16]; sscanf(s, "%*d %*d/%*d %*2d:%*2d %s %s", name, country); assert(strcmp(name, "Amy") == 0); assert(strcmp(country, "AB") == 0); 是两个缓冲区,有足够的空间来存储数据。

示例:

2017-02-21 23:45:41.7734 | MyLogger | INFO | PathInfo [/json/api/GetData] Duration [821,1381 ms] IpAddress [xx.xx.xx.xx] RequestParam [{"MyObj":{"UserId":87026,"SessionId":1022977,}]

on wandbox

另一种可能的解决方案是使用strstr来定位输入中特定子字符串(在您的情况下为名称和国家/地区)的位置。