你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS 階段學習筆記(字符串操作)

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

編輯: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')); //1
10     printf("%c\n",tolower('A'));//a
11     printf("%c\n",toupper('a'));//A
12     printf("%d\n",digittoint('1'));//1
13     printf("%d\n",ishexnumber('a'));//1
14     printf("%d\n",isnumber('a'));//0
15     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);//結果:0
10     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 }

 

 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved