9

受け入れるプログラムは次のとおりです。

  1. ユーザーからの一言。
  2. ユーザーからの一言。

文中に入力された単語の位置を見つけるにはどうすればよいですか?

#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;
}
4

6 に答える 6

21

ptrポインターは の先頭を指すので、そこからword文ポインター の位置を差し引くことができます。sntnc

pos = ptr - sntnc;
于 2012-08-06T22:00:39.570 に答える
4

strstr()の戻り値は、「単語」の最初の出現へのポインタであるため、

pos=ptr-sntc;

これは、sntcとptrが同じ文字列へのポインタであるためにのみ機能します。発生と言うときを明確にするために、一致する文字列がターゲット文字列内で見つかったときの最初の一致する文字の位置です。

于 2012-08-06T22:03:00.940 に答える
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"); 
     }
 } 
于 2014-03-24T04:55:38.797 に答える