c語言--字符串

1.字符串

表現形式:char ch[5]={'a','b','c','d','e'};

注意點:

         雙引號括起來

         每個字符佔用一個字節

         以'\0'表示字符串結束

 

int main(int argc, const char * argv[])
{
    char str[100]="hahahaha\0wewewe\0helloworld";
    printf("%s\n",str);
    printf("%s\n",&str[9]);
    printf("%s\n",&str[16]);
    return 0;
}

 1.1字符串長度

注意點: 

        字符串有效長度不包含'\0'

        sizeof 是一個運算符, 求變量或者常量佔用內存空間大小

        strlen是一個函數, 求字符串有效字符個數

 

int mystrlen(const char * src)
{
    int i=0;
    while (src[i]!='\0') {
        i++;
    }
    return i;
}

int main(int argc, const char *argv[])
{
    char str[100]="hello world";
    printf("%d \n", mystrlen(str));//調用函數求出長度
    printf("%ld \n", sizeof(str));
    printf("%ld \n", sizeof("hello world"));
    printf("str == %ld \n", strlen(str));
    return 0;
}

 1.2字符串拷貝(複製)

函數:

   strcpy:

   char *strcpy(char *, const char *);

   strncpy:

   char *strncpy(char *, const char *, size_t);

注意點:

        s1的內存空間足夠容納s2字符串

        strncpy 選擇拷貝的字節數, 不一定包含'\0';

//自定義拷貝函數
char *mystrcpy(char *dst, const char *src)
{
    int i =0;
    while (src[i]) {
        dst[i]=src[i];
        i++;
    }
    dst[i]='\0';
    return dst;
}
int main(int argc, const char *argv[])
{
    char s1[100];
    char s2[50]="hello world\n";

    //char *str = strcpy(s1, s2);
    //printf("%s\n",strcpy(s1, s2));
    //printf("%s\n",str);
    //printf("%s\n",mystrcpy(s1, s2));

    strncpy(s1, s2, 10);
    s1[10]='\0';
    printf("%s\n", s1);
    
    return 0;
}

 1.3字符串拼接

函數:

   strcat:

   char *strcat(char *, const char *);

   strncat:

   char *strncat(char *, const char *, size_t);

   strncat在拼接後的新字符串後會添加一個'\0';

 

//自定義拼接函數
char *mystrcat(char *s1, const char *s2)
{
    int i=0,j;
    while (s1[i]) {
        i++;
    }
   //循環拼接操作
    for (j=0; s2[j]!='\0'; j++) {
        s1[i+j]=s2[j];
    }
    s1[i+j]='\0';
    return s1;
}
int main(int argc, const char *argv[])
{
    char s1[100]="hello world";
    char s2[50]="wearefriend";
    
    //printf("%s\n",strcat(s1, s2));
    //printf("%s\n",mystrcat(s1, s2));

    printf("%s\n",strncat(s1, s2, 5));
    
    return 0;
}

 1.4字符串比較函數

函數:

strcmp:

   int strcmp(const char *, const char *);

strncmp:

   int strncmp(const char *, const char *, size_t);

 s1 > s2 返回一個正數

 s1 == s2 返回0

 s1 < s2 返回一個負數

 

//自定義比較函數
int mystrcmp(const char* s1, const char *s2)
{
    int i;
    //循環判斷到字符串結尾處
    for (i=0; (s1[i]!='\0')&&(s2[i]!='\0') ; i++) {
        if (s1[i]==s2[i]) {
            continue;
        }
        else
        {
            break;
            //return  s1[i]-s2[i];
        }
    }
    //返回一個比較數
    return s1[i]-s2[i];
}
int main(int argc, const char *argv[])
{
    char *str1 = "borld";
    char *str2 = "zorld";
    
    //printf("%d\n", mystrcmp(str1, str2));
    printf("%d\n", strncmp(str1, str2, 7));
    //char s1[30]="hello world";
    
    return 0;
}

 1.5字符串查找

函數:

strchr:

   char *strchr(const char *, int);

strrchr:

   char *strrchr(const char *, int);

 

char *mystrchr(const char *s1, char ch)
{
    int i=0;
    while (s1[i]) {
        if (s1[i]==ch) {
            break;
        }
        i++;
    }
    return (char *)&s1[i];
}
int main(int argc, const char *argv[])
{
    char str[100]="hello world!";
    
    char *pstr = mystrchr(str, 'l');
    printf("%s\n", pstr);
    //printf("%s\n", pstr);

    return  0;
}

 1.6查找字符串

函數:

strstr:

   char *strstr(const char *, const char *);

int main(int argc, const char *argv[])
{
    char str1[100]="helloworld helloworld";
    printf("%p\n",&str1[strlen(str1)]);

//    char *pstr = strstr(str1, "world");
//    printf("%s\n", pstr);

    char *p = str1;
    while ((p=strstr(p, "world"))) {
        if (p) {
            printf("%s\n", p);
            p+=sizeof("world")-1;
        }
    }
    return 0;
}

 1.7字符串分割

函數:

strtok:

   char *strtok(char *, const char *);

 

int main(int argc, const char *argv[])
{
    char str[100]="hello world:good-bye:://we^are..friend()ok///";
//    char *p=strtok(str, ": ");
//    printf("%s\n",p);
//    while ((p=strtok(NULL, ": /^.()-"))) {
//        printf("%s\n",p);
//    }
    char *p = str;
    while ((p=strtok(p, ": /^.()-")))
    {
        printf("%s\n",p);
        p=NULL;
    }
//    p = strtok(NULL, ":");
//    printf("%s\n",p);
    return 0;
}

 eg.按照空格來分割字符串得到單詞數量(不使用系統函數)

int main(int argc, const char *argv[])
{
    char str[200];
    scanf("%[^\n]",str);
    int i=0;
    int flag=1;//標誌位
    int cnt=0;//統計數量
    while (str[i]!='\0') {
        if (str[i]==' ') {
            if (!flag) {
                flag = 1;
            }
        }
        else
        {
            if (flag) {
                cnt++;
                flag =0;
            }
        }
        i++;
    }
    printf("%d\n", cnt);

    return 0;
}

 

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章