我需要在文本中获取单词的位置,但我不能将带有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;
}
答案 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;
}