这是一个接受a:
的程序如何找到句子中输入单词的位置?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sntnc[50], word[50], *ptr[50];
int pos;
puts("\nEnter a sentence");
gets(sntnc);
fflush(stdin);
puts("\nEnter a word");
gets(word);
fflush(stdin);
ptr=strstr(sntnc,word);
//how do I find out at what position the word occurs in the sentence?
//Following is the required output
printf("The word starts at position #%d", pos);
return 0;
}
答案 0 :(得分:19)
ptr
指针将指向word
的开头,因此您只需从中减去句子指针sntnc
的位置:
pos = ptr - sntnc;
答案 1 :(得分:4)
strstr()的返回是指向“单词”第一次出现的指针,所以
pos=ptr-sntc;
这只能起作用,因为sntc和ptr是指向同一个字符串的指针。为了澄清当我说出现时,当你在目标字符串中找到匹配的字符串时,它是第一个匹配字符的位置。
答案 2 :(得分:4)
仅供参考:
char saux[] = "this is a string, try to search_this here";
int dlenstr = strlen(saux);
if (dlenstr > 0)
{
char *pfound = strstr(saux, "search_this"); //pointer to the first character found 's' in the string saux
if (pfound != NULL)
{
int dposfound = int (pfound - saux); //saux is already pointing to the first string character 't'.
}
}
答案 3 :(得分:3)
您可以使用此简单的strpos修改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int strpos(char *haystack, char *needle, int offset);
int main()
{
char *p = "Hello there all y'al, hope that you are all well";
int pos = strpos(p, "all", 0);
printf("First all at : %d\n", pos);
pos = strpos(p, "all", 10);
printf("Second all at : %d\n", pos);
}
int strpos(char *hay, char *needle, int offset)
{
char haystack[strlen(hay)];
strncpy(haystack, hay+offset, strlen(hay)-offset);
char *p = strstr(haystack, needle);
if (p)
return p - haystack+offset;
return -1;
}
答案 4 :(得分:2)
由于某些原因,我遇到了strstr()问题,我也想要索引。
我使用此函数在较大的字符串中找到子字符串的位置(如果存在),否则返回-1。
int isSubstring(char * haystack, char * needle) {
int i = 0;
int d = 0;
if (strlen(haystack) >= strlen(needle)) {
for (i = strlen(haystack) - strlen(needle); i >= 0; i--) {
int found = 1; //assume we found (wanted to use boolean)
for (d = 0; d < strlen(needle); d++) {
if (haystack[i + d] != needle[d]) {
found = 0;
break;
}
}
if (found == 1) {
return i;
}
}
return -1;
} else {
//fprintf(stdout, "haystack smaller\n");
}
}
答案 5 :(得分:0)
我对此帖子中ORIGINAL帖子的评论: 这个声明是不正确的:
char sntnc[50], word[50], *ptr[50];
C代码甚至无法编译:它将在此行失败:
ptr = strstr(sntnc,word);
因此该行应改为:
char sntnc[50], word[50], *ptr;
并且您不需要将记忆分配给&#39; ptr字符串&#39;。你只需要一个指向char的指针。