1. 程式人生 > 其它 >C語言第三彈

C語言第三彈

​ 有幾天沒更新了,這幾天也為忙於課程設計,所以把安排學習C語言的學習時間用來做課程設計了,這個學期的課程設計是一個用python語言實現的課程設計,由於我大一大二真的時沒怎麼讀書,大三的時候學了一點點的大資料分析,也算是和python有一點點的關係吧,但是呢學的也不是很精,咱就是說那時候就是天天的在想著怎麼搞錢,到處打工,到了考研的時候才回來學習C語言,的通過考研這一段時間的學習呢,我發現每一個語言的都有其特點和優勢,C語言呢,都說C語言的各種計算機語言的媽媽,其他的語言都是派生於它,確實,沒錯,但是呢C語言雖然偉大但是呢學習起來難度較大,而且C語言比較注重與格式的書寫,相對嚴謹;相對於Java來說兩種語言各有各的優勢以及特點,在社會上所佔的比重也不相上下。python的話就是一個相對來說,個人感覺比較簡單一點的語言,我個人也是對python比較感興趣,並且以後我也希望自己能夠從事與大資料分析這一門的學習。

好啦迴歸正題。今天需要總結的是關於字串處理的一些函式

字串處理函式

(1)strcmp函式

表現方式:if(strcmp(str1,str2)>0) printf("yes"); 有三種結果: (1)如果字串1與字串2相同,則函式值為0 (2)如果字串1》字串2,則返回值為正數 (3)第三種就可想而知了如果字串1《字串2,就是一個負數

但是呢題目應該會這麼問我們,用其他的方式,說用其他的方式;來實現該函式的功能

那麼下面呢有兩種方法:
    (1)第一種陣列的方法:
    #include<stdio.h>
    #include<string.h>

    int mycmp(const char* s1,const char* s2){
        int index = 0;
        while(1){
            if(s1[index]!=s2[index]){
                break;
            }else if(s1[index]=='\0'){
                break;
            }
            index++;
        }
        return s1[index]-s2[index];
    }
    int main(){
        char s1[]="agc";
        char s2[]="abc";
        printf("%d\n",mycmp(s1,s2));
        printf("%d\n",strcmp(s1,s2));
        return 0;
 

​ 這種方法呢就是用一個index索引來控制函式的程序,一旦當兩個數列的值不相等的時候呢就可以跳出進行一個相減去的操作,那麼在這個函式我也添加了這個函式的本身功能,在輸出結果的時候會有所 不同但其實是一樣的,可以去思考一下原因

(2)第二種方式呢就是說是一個用指標來解決的
    #include<stdio.h>
    #include<string.h>

        while(*s1 == *s2&&*s1 !='\0'){
            s1++;
            s2++;
        }
        return *s1 - *s2;
    }
    int main(){
        char s1[]="agc";
        char s2[]="abc";
        printf("%d\n",mycmp(s1,s2));
        printf("%d\n",strcmp(s1,s2));
        return 0;
    }

​ 第二種方法和第一種差不多隻不過是換了一個形式而已,也為s1和s2表示的是變數,是地址就可以自加,思路和第一種差不多

(2)strcpy函式

​ strcpy函式表示的是字串複製函式,將一個字串複製到另外一個字串

實現方式如下:

​ char str1[10],str2[]='China';

​ strcpy(str1,str2)將str2的值給到str1,但是在這個過程中要注意陣列容量

#include<stdio.h>
#include<string.h>
char* mtcpy(char* dst,const char* src){
	int idx = 0;
	while(src[idx]){
		dst[idx]=src[idx];
		idx++;
	}
	dst[idx]='\0';
	
	return dst;
}

int main(){
	char s1[80];
	char s2[]="abc";
	mtcpy(s1,s2);
	printf("%c",s1);
	return 0;
}

仔細觀摩函式的變化,用到的也是一個idx的作為下標,而判斷條件則作為src[idx],因為字串陣列的最後一個元素是'\0'

(3)strlen函式

​ 該函式的是計算字串的長度,但是計算的是字串的有效長度,不包括'\0'

#include<stdio.h>
#include<string.h>
int mylen(const char*s){
	int cnt = 0;
	int index = 0;
	while(s[index]!='\0'){
		index++;
		cnt++;
	}
	return cnt;
}
int main(){
	char line[] = "hello";
	printf("strlen=%lu\n",mylen(line));
	printf("strlen=%lu\n",strlen(line));
	printf("sizeof=%lu\n",sizeof(line));
}

sizeof函式也是計算字串長度的,但是包括了最後一位'\0'字元