比較值我有一個數組,看起來像這樣:在陣列串
char test[100]
那麼我想比較這陣是否具有這種特定句話
if (test == "yup this is the sentence") {
// do stuff
}
這是正確?有沒有更好的方法呢?謝謝。
比較值我有一個數組,看起來像這樣:在陣列串
char test[100]
那麼我想比較這陣是否具有這種特定句話
if (test == "yup this is the sentence") {
// do stuff
}
這是正確?有沒有更好的方法呢?謝謝。
你可以使用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
你不能這樣做在你在這裏做什麼是檢查身份平等(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
謝謝michi!當我將其應用於我的代碼時,這也適用 – coava