【问题标题】:How to search for a string in an array of structures?如何在结构数组中搜索字符串?
【发布时间】:2017-07-30 04:01:39
【问题描述】:

我想确定在命令行参数中传递的单词的频率,所以我用一个字符串定义了一个结构并且它是计数的,现在问题是当我试图通过比较来搜索结构数组中的字符串时使用strcmp() 函数的字符串,我得到Segmentation Fault,这是代码:-

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

typedef struct{
  char* word;
  int count;
} argsArray;

int search(argsArray array[] , char* Word , int len){
  for(int i=0; i < len; i++){
    if(strcmp(array[i].word , Word)==0){
        return i;
    }
  }
  return -1;
}

int main( int argc , char* argv[] ){
  argsArray inputArgs[50];
  int i,p=0,a;
  for(i=0;i<50;i++){
    inputArgs[i].word=NULL;
    inputArgs[i].count=0;
  }
  for( i=1 ; i < argc ; i++ ){
    a = search(inputArgs , argv[i] , argc);

    if(  a== -1 ){
        inputArgs[p].word=argv[i];
        inputArgs[p].count++;
        p++;
    }
    else{
        inputArgs[a].count++;
    }
  }
  for(i = 0; i < p; i++){
    printf("%s %d\n",inputArgs[i].word,inputArgs[i].count);
  }
  return 0;
}

【问题讨论】:

    标签: c arrays string search structure


    【解决方案1】:

    我将建议您进行一些更正。

    首先,我认为您在编写此代码时试图初始化结构数组。

    for(i=0;i<50;i++){
        inputArgs[i].word=NULL;
        inputArgs[i].count=0;
    }
    

    正如另一个答案中提到的,这将导致分段错误。你可以用""初始化input[i].word

    或者,在search函数中,可以检查array[i].word是否为NULL;如果找到NULL,则立即从函数中返回-1

    对于第二个建议,您的search 函数将变成这样。

    int search(argsArray array[] , char* Word , int len){
      for(int i=0; i < len; i++){
        if(array[i].word == NULL)
            return -1;
        if(strcmp(array[i].word , Word)==0){
            return i;
        }
      }
      return -1;
    }
    

    Reference for second suggestion

    【讨论】:

      【解决方案2】:

      inputArgs[i].word=NULL; 然后search(inputArgs , argv[i] , argc); 调用strcmp(array[i].word , Word)

      意思是你刚刚打电话给strcmp(NULL, Word) --> segfault

      【讨论】:

      • 然后怎么做,因为我想搜索那个字符串,如果没有找到,添加它,如果找到然后返回它的位置并将它的计数增加 1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2012-06-12
      相关资源
      最近更新 更多