获取文本中单词的初始位置

时间:2015-01-27 23:23:13

标签: c

我需要在文本中获取单词的位置,但我不能将带有char * text的指针转换为char text []来比较每个字符。

我试图在与特定单词匹配的文本中找到第一个子字符串的位置。

#include <stdio.h>
#include <string.h>
int searchWord(char *word, char *text);

int main (int argc, char *argv[])
{
    int i,searchString;
    if (!(argc>2)) {
        printf("Need 2 args");
        return 0;
    }
    printf("aaa %d\n" ,searchWord(argv[1],argv[2]));

    return 0;
}

int searchWord(char *word, char *text) // I need use that function to search.
{
    printf("\n\n%s\n\n",&word[0]);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

char *和char []转换不是问题,将char *转换为int是一个问题,因为argv []是一个字符数组的数组。

试试这个 - 它使用指针算法,可能有效:

int SearchWord( char *word, char *text, unsigned int length ) {
  unsigned int i = 0, d = 0, x = 0;
  x = strlen( text );
  // Keep looping til we reach less than total length
  for (; i <= ( x - length ); i++) {
    if (strncmp( text, word, length ) == 0) {
      d = i;
      break;
    }
    else {
      // Moving 1 character position
      text++;
    }
  }
  // Check if no match was found
  if (i == (x - length) {
    return -1;
  }
  for (i = 0; i <= d; i++) {
    // Revert the text
    text--;
  }
  return d;
}

答案 1 :(得分:0)

假设 text 由以空格分隔的单词组成,您可以考虑标记 text ,然后遍历标记以查看它们是否与 word <匹配< / em>的。尝试使用strtok(),网上有很多关于如何使用该功能的文档。

我在这里找到了一个关于如何使用strtok的相关问题:how to use strtok

您可以尝试以这种方式找到位置:

int search(char * word, char * text, unsigned int length) {
    char * token = strtok(text, " ");
    int position = 0;

    while (token != NULL) {
        // if word matches the token, we found our word
        if (! strncmp(word, token, length)) {
            return position;
        } else {
            position += (strlen(token) + 1);
            // get the next token from the text
            token = strtok(NULL, " ");
        }
    }
    // didn't find it
    return -1;
}