簡體   English   中英

如何掃描字符串以查找特定術語

[英]How to scan a string for specific terms

我正在嘗試掃描特定單詞的用戶輸入文本,然后,當這些單詞出現時,將它們打印到控制台。

#import <Foundation/Foundation.h>
#include <stdio.h>

int main(){
char cArray[] = "example";
char cInput[] = "";
char cOutput[] = "";

printf("\nType your message:\n");
for (int y=0; y<1; y++){
    fgets(cInput, 120, stdin);
}
printf("\nInitialised character array:\n");
for (int x=0; x<1; x++){
    if(strncmp(&cInput[x], &cArray[x], 120) == 0){
        strncpy(cOutput, cArray, strnlen(cInput, +1));
        printf("%s\n", cOutput);
        break;
        }
    }
}

輸出:

Type your message:
example

Initialised character array:
Program ended with exit code: 120

感謝任何反饋,因為我還在學習:)

謝謝。

編輯過的代碼:

#include <stdio.h>
#include <string.h>

#define MAX_STR_LEN 120

int main(){
char *cArray[MAX_STR_LEN] = {"example", "this"};
char cInput[MAX_STR_LEN] = "";
char cOutput[MAX_STR_LEN] = "";

printf("Type your message:\n");
for (int y=0; y<1; y++){
    fgets(cInput, MAX_STR_LEN, stdin);
    char * ptr = cInput;
    while((ptr=strstr(ptr, *cArray)) != NULL){
        strncpy(cOutput, ptr, strlen(*cArray));
        printf("Initialised string array:\n%s\n", cOutput);
        ptr++;
        }
    }
}

雖然我現在遇到一個不同的問題,但仍有效。 輸出似乎只在一個字完成之前注冊,因此只打印“example”。

輸出:

Type your message:
this is an example
Initialised string array:
example
Program ended with exit code: 0
char cInput[] = "";

此數組的大小為1。

fgets(cInput, 120, stdin);

這是數組超出綁定寫入,這將導致未定義的行為。

char cInput[120] = "";

你需要照顧

char cOutput[120] = "";

也。 因為您在比較后嘗試寫入此數組。

你需要string.h中的strstr函數

const char * strstr ( const char * str1, const char * str2 );

以下為您提供使用示例:

#include <stdio.h>
#include <string.h>

#define MAX_STR_LEN 120

int main(){
    char cArray[MAX_STR_LEN] = "example";  // string to be searched in the input string
    char cInput[MAX_STR_LEN] = ""; // input string
    char cOutput[MAX_STR_LEN] = ""; // buffer for found string

    printf("\nType your message:\n");
    for (int y=0; y<1; y++){     // this loop from original example looks strange, but it works
        fgets(cInput, MAX_STR_LEN, stdin);
    }
    // search in the input string
    char * ptr;
    if( ( ptr=strstr(cInput, cArray) ) != NULL)
    {
        //copy the string to cOutput
        strncpy(cOutput, ptr, strlen(cArray));
        // output the found string
        printf("String that was found: \n%s\n", cOutput);
    }
    else
    {
        printf("String was not found in the input!\n");
    }
}

編輯:

如果您想要所有字符串,請使用以下循環而不是if-else

    // search in the input string
    char * ptr = cInput;
    while( ( ptr=strstr(ptr, cArray) ) != NULL)
    {
        //copy the string to cOutput
        strncpy(cOutput, ptr, strlen(cArray));
        // output the found string
        printf("String \"%s\" was found at position %d\n", cOutput, (int)(ptr - cInput + 1));
        // find next string
        ptr++;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM