字符串的位置 - 从指针数组访问单个字符串

时间:2015-09-28 10:13:45

标签: c

我想在另一个字符数组中找到一个字符串。我试着通过字符来比较它的性格。但我无法访问个性,我需要一些帮助。

#include <stdio.h>
#include "source.h"

int main()
{  
    char *str[] = {"one","two","three","four"};
    int index;    

    index= locate_string(str, 4, "one");
    printf("String one is in the position %d\n", index);

    return 0;
}

int locate_string(char **stringArray, int len, char * string)
{
    int count = 0;
    while(count <= len){
      int j = 0;
      char *temp = (*stringArray)[count];

      while(j < len){
        if(temp == string[j]){
            j++;                
        }
      }
      if(j == len-1){
        return count-j;
      }
    }
    return -1;
}

谢谢你的帮助。我上周在C学习编程。

1 个答案:

答案 0 :(得分:1)

<强>修复

  
      
  • 迭代计数&lt; len(不是&lt; = len)
  •   
  • 使用strcmp来简化字符串比较(这就是它的用途)
  •   
  • 增量计数器count以正确循环字符串数组
  •   

<强>码

#include <stdio.h>

int main(void)
{  
  char *str[] = {"one","two","three","four"};
  int index;    

  index = locate_string(str, 4, "one");
  printf("String one is in the position %d\n", index);

  return 0;
}

int locate_string(char **stringArray, int len, char *string)
{
  int count = 0;
  while(count < len)
  {
    if(!strcmp(stringArray[count], string))
    {
      return count;
    }
    ++count;
  }
  return -1;
}

<强>输出

$ gcc -g test.c -o test
$ valgrind ./test
==12705== Memcheck, a memory error detector
==12705== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12705== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==12705== Command: ./test
==12705== 
String one is in the position 0
==12705== 
==12705== HEAP SUMMARY:
==12705==     in use at exit: 0 bytes in 0 blocks
==12705==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==12705== 
==12705== All heap blocks were freed -- no leaks are possible
==12705== 
==12705== For counts of detected and suppressed errors, rerun with: -v
==12705== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

以上是使用valgrind运行的示例,以阻止泄漏..