1. 程式人生 > >C語言:字串處理類函式

C語言:字串處理類函式

strlen() 求字串的實際長度(不包括'\0')  

strcpy()

char *strcpy(char* dest, const char *src);

strcpy(目標串,源串);

strcpy(s2, s1);

char s1[80] = “張三”;

char s2[80];

// 希望能把s1中所儲存的字串,複製到s2陣列中。

s2 = s1;

上述語句是錯誤的,因為陣列名稱是常量,常量不能賦值!

不能用賦值語句將一個字串常量或字元陣列直接給一個字元陣列。

 

若必須實現這個功能,則,必須藉助C語言所提供的一個函式:strcpy();

strcpy()函式的本質含義:將以第二個引數作為首地址所指向的空間開始遇0則止的字元,複製到以第一個引數作為首地址所指向的位元組開始的連續儲存空間中。

 

src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標

strncpy() char *strncpy(char *dest, const char *src, int n) 把src所指向的字串中以src地址開始的前n個位元組複製到dest所指的陣列中,並返回被複制後的dest。

strcat()

extern char *strcat(char *dest, const char *src);

 

把src所指向的字串(包括“\0”)複製到dest所指向的字串後面(刪除*dest原來末尾的“\0”)。要保證*dest足夠長,以容納被複制進來的*src。*src中原有的字元不變。

返回指向dest的指標

strcmp()

字串內容的比較

extern int strcmp(const char *s1, const char *s2);

以前曾經說過這樣的問題:

printf(“%d\n”, “abcd” > “xyz”);

上述比較本質是:字串的首地址比較,與其內容無關;若想進行字串內容的大小比較,需要用到函式:strcmp() 。

 

兩個字串內容(ASCII碼值)的大小比較;

函式返回值有三種情況:

1、返回值為1,則,s1所指向的串大於s2所指向的串;

2、返回值為0,則,s1所指向的串等於s2所指向的串;

3、返回值為-1,則,s1所指向的串小於s2所指向的串;

 

字串內容大小比較的方法:

兩個字串都從第一個字元開始比較,若相同,則比較下一個字元,直到遇到0結束標誌;只要有一次字元大小(ASCII碼值)不同,則,比較結束。

strchr()

查詢字串s中首次出現字元c的位置

extern char *strchr(const char *s,char c)

功能:若c存在於s所指向的字串中,則,函式返回c在s所指向的字串中第一次出現的位置(地址值);若c不在s所指向的字串中,則,函式返回NULL(0)。

 

p = strchr(“abcdeaabbcde”, ‘e’);

則,p將指向下標為4的字元e;也就是說,p的值是e的首地址。

在上述操作基礎上,再進一步執行下面的語句,就可以找到第二個’e’:

p = strchr(p+1, ‘e’);

例子見下面

strlwr()

extern char *strlwr(char *s);

STRing LoWeRcase(字串小寫)

功能:將字串s引數轉換為小寫形式

說明:只轉換s引數中出現的大寫字母,不改變其它字元。返回指向s引數的指標

相容性說明:strlwr不是標準C庫函式,只能在VC中使用。

strupr()

extern char *strupr(char *s);

STRing UPpeRcase(字串大寫)

將字串s轉換為大寫形式。

說明:只轉換s中出現的小寫字母,不改變其它字元。返回指向s的指標

相容性說明:strupr不是標準C庫函式,只能在VC中使用。

//找一個字元在字串中出現的所有位置
#include<stdio.h>
#include<string.h>

void main(void){
    char st[20] = {"avbxgadsca"};

//右邊的結果說明:沒有被賦值的元素全部被系統賦值為零結束標誌
    char *p = NULL;
    int i;
    
    for(i = 0; i < 20; i++){
        printf("%-3d    ", st[i]);
        printf("%c    ", st[i]);
        printf("%p\n", &st[i]);
    }

 

    for(p = st; *p; ){
        p = strchr(p, 'a');
        if(p != NULL){
            printf("%p ", p);
            p++;
        }
    }
    printf("\n");
}

//找一個字元在字串中出現的所有位置
#include<stdio.h>
#include<string.h>

void main(void){
	char st[20] = {"avbxgadsca"};
	char *p = NULL;
	int i;
	
	for(i = 0; i < 20; i++){
		printf("%-3d    ", st[i]);
		printf("%c    ", st[i]);
		printf("%p\n", &st[i]);
	}

	for(p = st; *p; ){
		p = strchr(p, 'a');
		if(p != NULL){
			printf("%p ", p);
			p++;
		}
	}
	printf("\n");
}