小白來學C語言之字符串相關的函數:gets、puts、strlen、strcpy、strcat、strcmp

常用的字符串處理函數

字符串的輸入和輸出:gets和puts

char * gets(char str) :從輸入緩衝區中讀取一個字符串存儲到字符指針變量str所指向的內存空間。
puts(char
str):將字符串str輸出。其中str是字符串數組名或者字符串指針。
區別

  • 輸入字符串: scanf( )或gets ( )
    前者遇空格結束輸入,後者遇回車結束輸入
  • 輸出字符串:printf()或puts()
    後者輸出字符串後會自動換行,前者不會。
#include<stdio.h>
#include<string.h>
int main(){
	char str[80];
	gets(str);
	puts(str);
} 

求字符串長度 strlen (str)

計算字符串str的長度,直到空結束字符,但不包括空結束字符。

注:

  • 字符串最後的那個\0,是不計入在內的,而中間的空格是計入的。
  • 英文字母,字符,數字長度爲1,中文漢字標點長度爲2
#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80];
	gets(str);
	n= strlen(str);
	printf("%d\n",n);
}

i love you
10

考慮下用下面的指針可以不?

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80] , *str2;
	gets(str2);
	n= strlen(str2);
	printf("%d\n",n);
}

當然是不行的,因爲*str2是一個野指針,沒有內存空間,是存不了東西的。如果用 str2=str*str2=str,這時 str2*str2就有指向的空間了,可以對其進行賦值。

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80] , *str2=str;
	gets(str2);
	n= strlen(str2);
	printf("%d\n",n);
}

i love you!
12

字符串的複製:strcpy (str1, str2)

將str2複製到str1
注意,strcpy會將sre的最後0也拷貝,對於字符串的賦值不能直接用 = 符號,必須strcpy

#include<stdio.h>
#include<string.h>
int main(){
	char str[80] , str2[80]="i love you";//給str2賦初值
	puts(str2);//輸出str2  i love you
	gets(str);//輸入str  happy
	strcpy(str2,str);//將str的值賦值給str2
	puts(str2);//輸出str2 happy
}

字符串連接strcat(str1, str2)

將str2追加到str1字符串的結尾
內部實現:從str1 開頭開始找,找到‘\0’,找到以後將srtr1的第一一個字符覆
蓋dst的這個‘\0’,直到src的最後-一‘\0’寫進去。

#include<stdio.h>
#include<string.h>
int main(){
	int n;
	char str[80],str1[80]="you love me" , str2[80]="i love you ";
	puts(strcat(str1,str2));
}

you love me i love you

一字符串比較: strcmp(str1,str2)

兩個字符串自左向右逐個字符相比(按 ASCII 值大小相比較),直到出現不同的字符或遇 \0 爲止。
設這兩個字符串爲str1, str2,
若str1=str2,則返回零;
若str1 <str2,則返回負數;
若str1>str2,則返回正數。
內部是做減法操作

1."A"<"B" 
2."A"<"AB" 
3."Apple"<"Banana" 
4."A"<"a" 
5."compare"<"computer"

有關字符串與指針的知識可以看這裏

畢竟是小白,從小白視角看可能不會太深,但像我一樣的小白應該都能看懂。
這篇博客主要是寫給新手的,希望大家都能學懂學好,嘿嘿,寫的不好還望大佬勿噴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章