文章程式碼顯示

2018年2月4日 星期日

《筆記》C語言 - 06_補充2:字串複製、字串拼接、字串比較、字元搜尋、字串搜尋、回傳字串長度、size_t

strcpy 字串複製
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main(void) {

/* 將字串 s2 整個複製至陣列 s1 (注意會改變s1)。 並回傳 s1 */
// 使用方法 char* array = strcpy( char *s1, const char *s2)

 char text1[30] = "adbfdhgsjkjykyt";
 char* text2 = "My name.";

 printf("%s\n",  text1); // 原text1
 strcpy(text1, text2);
 printf("%s",  text1); // text2 覆製且覆蓋原有的 text1

 return 0;
}




strncpy 字串複製(前n個字元)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 將字串 s2 "前 n 個字元複製至陣列 s1 (注意會改變s1)。 並回傳 s1 */
// char* array = strncpy( char *s1, const char *s2, size_t n)

 char text1[30] = "adbfdhgsjkjykyt";
 char* text2 = "My name.";

 printf("%s\n",  text1); // 原text1

 int n = 5;
 strncpy(text1, text2, n); 
 //text1[n] = '\0'; //注意在做複製的時候若長度不足以包含到"空白字元" 則要手動加入 
 printf("%s",  text1); // text2 覆製且覆蓋原有的 text1


 return 0;
}



strcat 字串拼接
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 將字串 s2 串接到字串 s1 的尾端,且 s2 的第一個字元會覆寫 s1 的空白(結束)字元,
並自動在尾端加上空白字元並回傳 */
// char* array = strcat( char *s1, const char *s2)

 char text1[20] = "My name."; // 注意字元陣列的長度必須足夠
 char text2[] = "is Evan.";

 //char *text1 = "My name."; // 不可定義為指標變數的形式
 //char *text2 = "is Evan."; // 不可定義為指標變數的形式

 printf("%s\n",  text1);
 strcat(text1, text2);
 printf("%s",  text1);

 return 0;
}



strncat 字串拼接(前n個字元)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 將字串 s2 前 n 個字元串接到字串 s1 的尾端,且 s2 的第一個字元會覆寫 s1 的空白(結束)字元,
並自動在尾端加上空白字元並回傳 */
// char* array = strncat( char *s1, const char *s2, size_t n)

 char text1[20] = "My name.";
 char text2[] = "is Evan.";

 int n = 4;

 printf("%s\n",  text1);
 strncat(text1, text2, n);
 printf("%s",  text1);

 return 0;
}



strcmp 字串比較
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 比較字串 s1 與 字串 s2 ,若兩字串相等則回傳 0 。 若 s1 < s2 回傳負值; s1 > s2 回傳正值 */
// int Num = strcmp( const char *s1, const char *s2)

 char *text1 = "ABCDE";
 char *text2 = "ABCDE";

 char *text3 = "ABCDD";
 char *text4 = "ABCDF";

 printf( "%d\n%d\n%d\n", strcmp(text1,text2),
   strcmp(text1,text3),
   strcmp(text1,text4) );

 return 0;
}



strchr 字元搜尋(找字元在字串中第一次出現的位置)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 找出字元 c 在字串 s 中第一次出現的位置。如果有找到則回傳 c 在 s 中的 "指標位址";
否則回傳 NULL 的 "指標位址"*/
// char address = strchr( const char *s, int c)

 char *text1 = "This is a test string";
 char find1 = 'i';
 char find2 = 'B';
 char find3 = 'F';

 char *p1; //定義一個指標陣列
 char *p2; //定義一個指標陣列
 char *p3; //定義一個指標陣列

 p1 = strchr( text1, find1);
 p2 = strchr( text1, find2);
 p3 = strchr( text1, find3);

 printf( "text1 的起始位置為 %p\n", &text1[0]);
 printf( "字元 i 在 %p , 也就是第 %d 個字的地方 \n", p1, ( p1 - &text1[0] )+1 );
 printf( "字元 B 在 %p\n", p2);
 printf( "字元 F 在 %p", p3);

 return 0;
}



strchr 字元搜尋更常見的應用
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 找出字元 c 在字串 s 中第一次出現的位置。如果有找到則回傳 c 在 s 中的 "指標位址";
否則回傳 NULL 的 "指標位址" */
// char address = strchr( const char *s, int c)

 char *text1 = "This is a test string";
 char find1 = 'i';
 char find2 = 'B';

 if ( strchr(text1, find1) != NULL ) printf("字元 %c 有在字串 %s 裡", find1, text1);
 else printf("在字串 %s 裡找不到字元 %c", text1, find1);

 printf("\n\n");

 if ( strchr(text1, find2) != NULL ) printf("字元 %c 有在字串 %s 裡", find2, text1);
  else printf("在字串 %s 裡找不到字元 %c", text1, find2);

 return 0;
}



strrchr 字元搜尋(找字元在字串中最後一次出現的位置)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 找出字元 c 在字串 s 中最後一次出現的位置。如果有找到則回傳 c 在 s 中的 "指標位址";
否則回傳 NULL 的 "指標位址" */
// char address = strrchr( const char *s, int c)

 char *text1 = "This is a test string";
 char find1 = 's';

 char *p1;

 p1 = strrchr( text1, find1);

 printf( "text1 的起始位置為 %p\n", &text1[0]);
 printf( "最後一個字元 s 在 %p , 也就是第 %d 個字的地方 \n", p1, ( p1 - &text1[0] )+1 );

 return 0;
}



strstr 字串搜尋(找字串在字串中第一次出現的位置)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 找出字串 s2 在字串 s1 中第一次出現的位置。如果有找到則回傳 s2 在 s1 中的 "指標位址";
否則回傳 NULL 的 "指標位址" */
// char address = strstr( const char *s1, const char *s2)

 char *text1 = "This is a test string";
 char *text2 = "test";

 char *p1;

 p1 = strstr( text1, text2);
 printf( "text1 的起始位置為 %p\n", &text1[0]);
 printf( "字串 text2 在 %p , 也就是第 %d 個字的地方 \n", p1, ( p1 - &text1[0] )+1 );

 return 0;
}



strlen 回傳字串長度(不包含空白字元)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int main(void) {

/* 算出字串 S 的長度。回傳此長度(此長度不包含結尾的空白字元) */
// size_t strlen( const char *s )
// 這邊的 size_t 作用於兼容各作業平台。常見為 unsigned int(32位元架構下)

 const char *text1 = "TEST1234";
 printf("字串 text1 的長度為 %d", strlen(text1) );
 printf("\nstrlen(text1) 回傳的變數長度為 %d", sizeof(strlen(text1)));

 return 0;
}


size_t

size_t 在 C 裡面常見被定義為 unsigned int (或 unsigned long )

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引