1. 程式人生 > 其它 >c中常用的字串操作

c中常用的字串操作

c中常用的字串操作

標頭檔案:<string.h>

1.strchr()查詢某字元在字串中首次出現的位置

strchr() 用來查詢某字元在字串中首次出現的位置,其原型為:

char * strchr (const char *str, int c);

【引數】str 為要查詢的字串,c 為要查詢的字元。

strchr() 將會找出 str 字串中第一次出現的字元 c 的地址,然後將該地址返回。

注意:字串 str 的結束標誌 NUL 也會被納入檢索範圍,所以 str 的組後一個字元也可以被定位。

【返回值】如果找到指定的字元則返回該字元所在地址,否則返回 NULL。

返回的地址是字串在記憶體中隨機分配的地址再加上你所搜尋的字元在字串位置。設字元在字串中首次出現的位置為 i,那麼返回的地址可以理解為 str + i。

提示:如果希望查詢某字元在字串中最後一次出現的位置,可以使用 strrchr()函式。

void teststrchr(char* str,char ch){
	char *pch;
	pch=strchr(str,ch);
	while (pch!=NULL)
	{
		printf ("found at %d\n",pch-str+1);
		pch=strchr(pch+1,ch);
	}
}

2.strrchr()查詢某字元在字串中最後一次出現的位置

strrchr() 函式用於查詢某字元在字串中最後一次出現的位置,其原型為:
char * strrchr(const char *str, int c);

【引數】str 為要查詢的字串,c 為要查詢的字元。

strrchr() 將會找出 str 字串中最後一次出現的字元 c 的地址,然後將該地址返回。

注意:字串 str 的結束標誌 NUL 也會被納入檢索範圍,所以 str 的組後一個字元也可以被定位。

【返回值】如果找到就返回該字元最後一次出現的位置,否則返回 NULL。

返回的地址是字串在記憶體中隨機分配的地址再加上你所搜尋的字元在字串位置。設字元在字串中首次出現的位置為 i,那麼返回的地址可以理解為 str + i。

提示:如果希望查詢某字元在字串中第一次出現的位置,可以使用 strchr() 函式。

void teststrrchr(char* str, char ch){
	char *pch;
	pch = strrchr(str,ch);
	printf ("Last occurence of 's' found at %d \n",pch-str+1);
}

3.strstr()返回字串中首次出現子串的地址

strstr()函式用來檢索子串在字串中首次出現的位置,其原型為:
char *strstr( char *str, char * substr );

【引數說明】str為要檢索的字串,substr為要檢索的子串。

【返回值】返回字串str中第一次出現子串substr的地址;如果沒有檢索到子串,則返回NULL。

void teststrstr(char* str, const char* substr){
	char *pch;
	pch = strstr(str,substr);
	if(NULL != pch)
		strncpy(pch,"sample",6);
	puts(str);
}

4.strtok()字串分割

定義函式:char * strtok(char *s, const char *delim);

函式說明:strtok()用來將字串分割成一個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當strtok()在引數s 的字串中發現到引數delim 的分割字元時則會將該字元改為\0 字元。在第一次呼叫時,strtok()必需給予引數s 字串,往後的呼叫則將引數s 設定成NULL。每次呼叫成功則返回下一個分割後的字串指標。

返回值:返回下一個分割後的字串指標,如果已無從分割則返回NULL。

void teststrtok(char* str, const char* delim){
	char *pch;
	pch = strtok(str,delim);
	while(NULL != pch){
		printf("%s\n",pch);
		pch = strtok(NULL,delim);
	}
}

測試完整程式碼:

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

void teststrchr(char* str,char ch){
	printf("----------------strchr------------------\r\n");
	char *pch;
	pch=strchr(str,ch);
	while (pch!=NULL)
	{
		printf ("found at %d\n",pch-str+1);
		pch=strchr(pch+1,ch);
	}
}

void teststrrchr(char* str, char ch){
	printf("----------------strrchr-----------------\r\n");
	char *pch;
	pch = strrchr(str,ch);
	printf ("Last occurence of 's' found at %d \n",pch-str+1);
}

void teststrstr(char* str, const char* substr){
	printf("----------------strrstr-----------------\r\n");
	char *pch;
	pch = strstr(str,substr);
	if(NULL != pch)
		strncpy(pch,"sample",6);
	puts(str);
}

void teststrtok(char* str, const char* delim){
	printf("----------------strrtok-----------------\r\n");
	char *pch;
	pch = strtok(str,delim);
	while(NULL != pch){
		printf("%s\n",pch);
		pch = strtok(NULL,delim);
	}
}

int main(){
	char str[] = "-This is a simple string.";
	printf ("Looking for the 's' character in \"%s\"...\n",str);
	teststrchr(str,'s');
	teststrrchr(str,'s');
	teststrstr(str,"simple");
	teststrtok(str," -.");
	system("pause");
	return 0;
}

執行結果: