IOS 階段學習筆記(字串操作)

來源:互聯網
上載者:User

IOS 階段學習筆記(字串操作)
一、字串的操作  1)字串的儲存,字元數組,在堆裡面申請記憶體空間。  執行個體代碼:  

#include <stdlib.h>#include <string.h>int main(){    char str[100] = "hello world";    char *p = "hello world";    //*p ='H';//常量字串不可以修改,p指向唯讀地址    p = str;    *p = 'H';   // printf("%s",str);    p = (char*)malloc(100);    //判空    if(p==NULL)         return 0;    //清零    memset(p,0,100);    printf("p=%p\n",p);    //字串賦值    //memcpy(p, "helloworld", 10);//方法一:記憶體拷貝    sprintf(p,"%s","helloworld");//方法二:sprintf()輸出賦值    //p = "helloworld";//錯誤,p指向常量區,把申請的記憶體都丟了    printf("p=%p\n",p);    printf("%s",p);    //釋放    free(p);    return 0;} 

 

 2)字元操作函數, 形參為對應參數的ASCII碼值,滿足條件返回1,不滿足返回0 ; 需要引用標頭檔#include <ctype.h>  1、int     isalnum(int);// 判斷是否是數字或者字母  2、int     isalpha(int);//判斷是否是英文字元  3、int     isdigit(int);//判斷是否是數字 0~9  4、int     islower(int);//判斷是否是小寫字母  5、int     isupper(int);//判斷是否是大寫字母  6、int     isxdigit(int);//是否是16進位數字  7、int     tolower(int);//轉成小寫  8、int     toupper(int);//轉成大寫  9、int     digittoint(int);//把十六進位數字字元轉換成整型 10、int     ishexnumber(int);//等價 isxdigit 11、int     isnumber(int);//等價isdigit  執行個體代碼:  
 1 #include <ctype.h> 2 int main() 3 { 4     printf("%d\n",isalnum('1'));//1 5     printf("%d\n",isalpha('1'));//0 6     printf("%d\n",isdigit('a'));//0 7     printf("%d\n",islower('A'));//0 8     printf("%d\n",isupper('a'));//0 9     printf("%d\n",isxdigit('F')); //110     printf("%c\n",tolower('A'));//a11     printf("%c\n",toupper('a'));//A12     printf("%d\n",digittoint('1'));//113     printf("%d\n",ishexnumber('a'));//114     printf("%d\n",isnumber('a'));//015     return 0;16 }

 

  3)字串拷貝 使用strcpy或strncpy 後者可以指定拷貝長度。  執行個體代碼:  
 1 int main() 2 { 3     char str[20] ="XXXXXXXXXXXXXX"; 4     char *p = "hello"; 5     strcpy(str,p);//從p的位置拷貝字串,把p後面的'\0'也拷貝過來.如果接收的字串空  間不夠大,可能會越界 。 6     printf("%s\n",str);//從str開始,列印到\0結束 7     for(int i=0;i<10;i++){ 8         printf("str[%d]=%c=%d\n",i,str[i],str[i]); 9     }10     unsigned long len=strlen(str);11     strncpy(str,p,len-1);//最後的參數:最大拷貝字元數.一般設定為目的字串bufsize-1,預留結束符12     str[len-1] = '\0';//數組的最後的一個元素置為結束符13     printf("%s\n",str);//從str開始,列印到\0結束14 15 }

 

 4)字串比較函數 strcmp, strncmp  後者可以限定比較字串的長度,如果相等比較結果等於0,如果s1>s2 結果大於0;      如果s1<s2 結果小於0;比較結果等於字串中首個不相等字元的ascii碼的差值。 執行個體代碼:  
 1 int main() 2 { 3     char *p1 = "helloAworld"; 4     char *p2 = "helloB"; 5     int rst; 6     rst = strcmp(p1, p2); 7     printf("rst = %d\n",rst);//結果:-1 8     rst = strncmp(p1, p2, 2);//2表示比較的最大長度 9     printf("rst = %d\n",rst);//結果:010     return 0;11 }

 

 5)尋找字串函數    1、strchr 從左往右正向尋找。  2、strrchr 從右往左逆向尋找。  3、strstr 返回 s2字串在s1字串中第一次出現的位置,找不到對應的字串, 返回NULL。  執行個體代碼:  
 1 int main() 2 { 3     char *p = "hello china world"; 4     char *pRst; 5     pRst = strchr(p,'X');//找不到返回NULL 6     printf("%s\n",pRst); 7     printf("%s\n",strchr(p,'l'));//正向 8     printf("%s\n",strrchr(p,'l'));//逆向 9     pRst = strstr(p,"china");10     printf("%s\n",pRst);11     return 0;12 }

 

  6)字串拼接函數     1、strcat, 結構char *strcat(char *dst, const char *src) dst 指向的記憶體剩餘的空間要足夠容納src字 符串,dst src 指向的記憶體不能重疊。   2、strncat,結構char *strncat(char *, const char *, size_t n) size_t n: 最大拼接字元個數//數組的長度-當前的有效個數-1(預留結束符) 執行個體代碼: 
 1 int main() 2 { 3     char str[20] = "hello"; 4     strcat(str," world");//在原字串的末尾,加上新的字串 5     printf("%s\n",str); 6     int len = (int)strlen(str); 7     strncat(str,"hello world",20-len-1); 8     len = (int)strlen(str); 9     printf("strlen=%d,%s\n",len,str);10     return 0;11 } 

 

7)字串分割函數 strtok 結構char *strtok(char *src, const char *demi)。 1、strtok 把src字串中所有的分隔字元變成'\0' 2、直接修改原字串 3、只有第一次調用的時候需要傳遞字串的首地址, 從第二次開始需要傳遞NULL 4、寫一個函數實現截取字串並提取被截斷的任一部分字元  實現代碼:  
 1 void* splitstr(char *str,char *sp,int index){ 2     char *result = NULL; 3     result = strtok( str, sp ); 4     int num=0; 5     while( result != NULL ) { 6         if(num==index) 7             break; 8         result = strtok( NULL, sp ); 9         num++;10     }11     return  result;12 }13 14 int main(){15     char str[] = "我愛#中華#人民#共和國";16     char sp[] = "#";17     char *spstr=str;18     char *spf=sp;19     char *result = (char*)splitstr(spstr,spf,2);//結果:人民20     printf("%s",result);21     return 0;22 }

 

  8)檢索字串  1、strpbrk 函數;結構為 char *strpbrk(const char *s1, const char *s2);依次檢索s1中的字元,        當s2中也包含時,停止檢索,並返回該字元位置.  2、strspn 函數;結構為 size_t strspn(const char *s1, const char *s2);//s1中s1開頭連續的都在s2中的字元數  執行個體代碼: 
1 int main()2 {3     char *p1 = "hello world";4     char *p2 = "girl";5     printf("%s\n",strpbrk(p1,p2));//'l'在p2也有,'l'是2個字串的第一個公用字元,返回在p1中的地址6     char *p3 = "lehRwsrt";7     printf("%lu\n",strspn(p1,p3));//p1中,前4個字元,在p3中也存在8     return 0;9 } 

 

9)提取整數, 以數字開頭提取到字母截止 ;實現函數有    1、atoi 用於提取 int類型資料    2、atof 用於提取 double,float等浮點型資料    3、atol 用於提取 long 等長整形資料  執行個體代碼:  
 1 int main(){ 2     int a; 3     a=atoi("2adse"); 4     printf("a=%d\n",a); 5  6     double d; 7     d=atof("122dsf3.34f4"); 8     printf("d=%.3f\n",d); 9 10     long l;11     l=atol("23454df3556s");12     printf("l=%ld\n",l);13     return 0;14 }

 

  10)反轉字串  執行個體代碼:  
 1 char *reverse(char *s){ 2     char ch; 3     unsigned long len=strlen(s); 4     for (int i=0; i<=len/2; i++) { 5         ch=*(s+i); 6         *(s+i)=*(s+len-1-i); 7         *(s+len-1-i)=ch; 8     } 9     return  s;10 }11 12 char *strcat1(char *s,const char *ct){13     char *p=s;14     while (*p!='\0') {15         p++;16     }17 18     while (*ct!='\0') {19         *p=*ct;20         p++;21         ct++;22     }23     return  s;24 }25  26 int main(){27     //反轉字串28     char str[100]="asdfer";29     printf("%s",reverse(str));30     char *qstr="qianfeng";31     strcat1(str, qstr);32     printf("%s",str);33     return 0;34 }

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.