2015-11-28 43 views
0

比較值我有一個數組,看起來像這樣:在陣列串

char test[100]

那麼我想比較這陣是否具有這種特定句話

if (test == "yup this is the sentence") { 
    // do stuff 
} 

這是正確?有沒有更好的方法呢?謝謝。

回答

2

你可以使用strstr

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

int main(void) { 
    char test[256] = "This is a looooooonnnnggggg string which contains ('yup this is the sentence') my needed string inside"; 

    if (strstr(test, "yup this is the sentence") != NULL){ 
     printf("True\n"); 
    }else{ 
     printf("False\n"); 
    } 
    return 0; 
} 

,或者你可以使用一些指針運算:

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

void checkString(char *string1, char *string2); 

int main(void){ 
    char test[256] = "This is a looooooonnnnggggg string which contains ('yup this is the sentence') my needed string inside"; 
    char string2[] = "yup this is the sentence"; 

    checkString(test, string2); 
    return 0; 
} 

void checkString(char *string1, char *string2){ 
    char *s1, *s2, *s3; 

    size_t lenstring1 = strlen(string1); 
    size_t lenstring2 = strlen(string2); 

    if (lenstring2 < 1){ 
     printf("There is no substring found"); 
     exit(1); 
    } 

    size_t i=0,j=0; 
    int found=0; 

    s1 = string1; 
    s2 = string2; 


    for(i = 0; i < lenstring1; i++){ 
     if(*s1 == *s2){ 
      s3 = s1; 
      for(j = 0;j < lenstring2;j++){ 
       if(*s3 == *s2){ 
        s3++;s2++; 
       }else{ 
        break; 
       } 
      } 

      s2 = string2; 
      if(j == strlen(string2)){ 
       found = 1; 
       printf("%s\nwas found at index : %zu\n",string2,i+1); 
       } 
      } 
     s1++; 
    } 

    if(found == 0){ 
     printf("No match Found"); 
    } 
} 

輸出:

yup this is the sentence 
was found at index : 53 
+0

謝謝michi!當我將其應用於我的代碼時,這也適用 – coava

3

你不能這樣做在你在這裏做什麼是檢查身份平等(ID EST如果你的兩個指針指向相同的內存區)。

你可以做的是使用的libc strstr,你想要做什麼:

#include <string.h> 

if (strstr(test, "yup this is the sentence") != NULL) 
{ 
    // do stuff if test contains the sentence 
} 

類型man 3 strstr在終端獲取有關功能的詳細信息,以及它的所有行爲。

如果您想了解函數的行爲,在這裏它被重純C,只有一個循環:

char  *strstr(const char *s1, const char *s2) 
{ 
    int  begin; 
    int  current; 

    begin = 0; 
    current = 0; 

    if (!*s2) 
     return ((char *)s1); 

    while (s1[begin]) 
    { 
     if (s1[begin + current] == s2[current]) 
      current++; 
     else 
     { 
      current = 0; 
      begin++; 
     } 
     if (!s2[current]) 
      return ((char *)s1 + begin); 
    } 
    return (0); 
} 

這是一個從學校項目的一部分。完整的項目包含所有C庫的基本功能。

您可以檢查出一些其他的字符串處理函數在這裏: https://github.com/kube/libft/tree/master/src/strings

+0

你究竟是什麼意思「你不能這樣做在C」?請解釋。 – Michi

+0

你說得對,我的假設是基於「高級語言」。我忘了,這是C.謝謝。 – coava

+0

我添加了一個重新編碼的函數和一個鏈接的例子。 – kube