常用的字符串處理函數
字符串的輸入和輸出:gets和puts
char * gets(char str) :從輸入緩衝區中讀取一個字符串存儲到字符指針變量str所指向的內存空間。
puts(charstr):將字符串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是一個野指針,沒有內存空間,是存不了東西的。如果用 ,這時 就有指向的空間了,可以對其進行賦值。
#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"
畢竟是小白,從小白視角看可能不會太深,但像我一樣的小白應該都能看懂。
這篇博客主要是寫給新手的,希望大家都能學懂學好,嘿嘿,寫的不好還望大佬勿噴。