顯示包含「C 字串比對」標籤的文章。顯示所有文章
顯示包含「C 字串比對」標籤的文章。顯示所有文章

2022年7月9日星期六

C strstr

char *strstr(const char *string1, const char *string2);

IBM說明

The strstr() function finds the first occurrence of string2 in string1. The function ignores the null character (\0) that ends string2 in the matching process.


我的理解:此函式會比對string2字串內容及長度,是否在string1中,並回傳string2出現在string1中的指標。

下列會分別修改string2,比對執行結果驗證。


程式碼(string1中有找到string2)

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

int main(void)
{
    char *string1 = "Say hello world";
    char *string2 = "world";
    char *result;

    result = strstr(string1,string2);
    printf("%s\n", result);
}

執行結果



程式碼(string1中未找到string2)

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

int main(void)
{
    char *string1 = "Say hello world";
    char *string2 = "word";
    char *result;

    result = strstr(string1,string2);
    printf("%s\n", result);
}

執行結果



參考資料

https://zh.m.wikipedia.org/zh-tw/String.h#%E5%87%BD%E6%95%B0

https://www.ibm.com/docs/en/i/7.1?topic=functions-strstr-locate-substring

2022年7月3日星期日

C strcoll

int strcoll(const char *string1, const char *string2);


功能:比較兩個字串(其實功能與strcmp相似)
回傳:1,0,-1(據自己實驗下來,會依據第一個發現不同的字元進行比大小,並回傳結果)
回傳代表意思
-1: string1 < string2
0: string1 = string2
1: string1 > string2

程式碼

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

char string1[] = "string1";
char string2[] = "string2";

int main(void)
{
  int result = 0;
  result = strcoll(string1,string2);
  printf("string1 compare with string2.Result:%d\n\n",result);

  result = strcoll(string2,string1);
  printf("string2 compare with string1.Result:%d\n\n",result);

  result = strcoll(string1,string1);
  printf("string1 compare with string1.Result:%d\n\n",result);
  
  return 0;
}

執行結果

參考資料

strcoll vs strcmp 差異

strcmp 主要會依序比較bytes,來得到結果。strcoll 會先依據當地的語言進行轉換後再進行比較。主要是避免在一些國家中的字符在比較時會有異常,stack overflow中的說明

2022年7月2日星期六

C strncmp

int strncmp(const char *string1, const char *string2, size_t count);

與strcmp類似,只是多了限定比較長度。(strcmp 參考)
功能:比較兩個字串
回傳:1,0,-1(自己實驗下來,會依據第一個發現不同的字元進行比大小,並回傳結果)
回傳代表意思
-1: string1 < string2
0: string1 = string2
1: string1 > string2
注意一定要確保字串中有空字元”\0”

程式碼(指定長度內有不同)

此處指定比較長度為7
#include <stdio.h>
#include <string.h>

int main(void)
{
  int result = 0;
  result = strncmp(string1,string2,7);
  printf("string1 compare with string2.Result:%d\n\n",result);

  result = strncmp(string2,string1,7);
  printf("string2 compare with string1.Result:%d\n\n",result);

  result = strncmp(string1,string1,7);
  printf("string1 compare with string1.Result:%d\n\n",result);
  return 0;
}
執行結果


程式碼(指定長度內無不同)

此處指定比較長度為4
#include <stdio.h>
#include <string.h>

char string1[] = "string1";
char string2[] = "string2";

int main(void)
{
  int result = 0;
  result = strncmp(string1,string2,4);
  printf("string1 compare with string2.Result:%d\n\n",result);

  result = strncmp(string2,string1,4);
  printf("string2 compare with string1.Result:%d\n\n",result);

  result = strncmp(string1,string1,4);
  printf("string1 compare with string1.Result:%d\n\n",result);
  return 0;
}
執行結果


C strcmp

int strcmp(const char *string1, const char *string2);

功能:比較兩個字串
回傳:1,0,-1(據自己實驗下來,會依據第一個發現不同的字元進行比大小,並回傳結果)
回傳值代表意思
-1: string1 < string2
0: string1 = string2
1: string1 > string2
注意一定要確保字串中有空字元”\0”

範例程式碼

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

char string1[] = "string1";
char string2[] = "string2";

int main(void)
{
  int result = 0;
  result = strcmp(string1,string2);
  printf("string1 compare with string2.Result:%d\n\n",result);

  result = strcmp(string2,string1);
  printf("string2 compare with string1.Result:%d\n\n",result);

  result = strcmp(string1,string1);
  printf("string1 compare with string1.Result:%d\n\n",result);
  return 0;
}

執行結果

打賞按讚