IOS-C_Day11___字符串

2015.2.2

 

#include <stdio.h>

#include <ctype.h>

 

//字符操作的函数

//int     isalnum(int);

//int     isalpha(int);

//int     isdigit(int);

//int     isgraph(int);

//int     islower(int);

//int     ispunct(int);

//int     isspace(int);//判断是否为空格

//int     isupper(int);

//int     isxdigit(int);

//int     tolower(int);

//int     toupper(int);

 

//int     digittoint(int);

//int     ishexnumber(int);

//int     isnumber(int);

 

 

//int main(int argc, const char * argv[]) {

//    

//    printf("isalnum = %d\n", isalnum(‘a‘));//判断是否为数字字符或者英文字母

//    printf("isalpha = %d\n", isalpha(‘*‘));//判断是否为英文字母

//    printf("isdigit = %d\n", isdigit(‘&‘));//判断是否为数字字符

//    printf("isgraph = %d\n", isgraph(‘\n‘));//判断是否为可见字符

//    printf("islower = %d\n", islower(‘*‘));//判断是否为小写字母

//    printf("ispunct = %d\n", ispunct(‘;‘));//判断是否为标点符号

//    printf("isupper = %d\n", isupper(‘A‘));//判断是否为大写字母

//    printf("isxdigit = %d\n", isxdigit(‘a‘));//判断是否为十六进制字符

//    printf("tolower = %c\n", tolower(‘A‘));//转换成小写字母

//    printf("toupper = %c\n", toupper(‘a‘));//转换成大写字母

//    printf("digittoint = %d\n", digittoint(‘F‘));//把十六进制字符转换成整型数据

//    printf("ishexnumber = %d\n", ishexnumber(‘9‘));//跟isxdigit函数相同

//    printf("isnumber = %d\n", isnumber(‘9‘));//跟isdigit函数相同

//    return 0;

//}

 

//字符串

//"hello world"

//1.双引号包含

//2.字符串中的每个元素占用一字节内存空间

//3.字符串末尾有隐藏字符‘\0‘

//

//打印字符串用%s 跟要打印字符串的首地址相对应

//存储字符串用字符数组,或者申请的内存

 

//gets() //输入一个字符串

//puts() //输出一个字符串

 

//int main(int argc,const char *argv[])

//{

//    char str[12]="hello world";

//    printf("%s\n", str);//%s打印字符串遇到‘\0‘结束

//

//    char str2[100];

//    gets(str2);//遇到‘\n‘结束

//    puts(str2);

//    

//    return 0;

//}

 

//char str1[100]="hello world"

//char *str2="hello world";

 

//int main(int argc,const char *argv[])

//{

//    char str1[100]="hello world";

//    char *str2="hello world";//str2指向常量区, 常量区的内容是只读的,不可以被修改

//    

//    //*str2 = ‘a‘;

//    str1[0]=‘a‘;

//    printf("%s\n", str1);

//    return 0;

//}

 

//字符串长度(通常指字符串有效长度)

//"hello world"

//有效长度不包含字符串末尾的‘\0‘

 

//sizeof strlen

//区别:

//1.sizeof 是一个运算符, strlen是一个函数

//2.sizeof 求变量或者常量占用内存空间大小, strlen 求字符串有效字符个数,操作对象是字符串

//3.sizeof 运算符是编译层次的概念, strlen函数是运行层次的概念

 

 

 

#include <string.h>

 

//size_t <==> unsigned long

 

//size_t my_strlen(const char *src)

//{

//    if (!src) {

//        return 0;

//    }

//    int len=0;

////    while (*src != ‘\0‘) {

////        len++;

////        src++;

////    }

//    for (;*src;) {

//        len++;

//        src++;

//    }

//    return len;

//}

//

//int main(int argc, char *argv[])

//{

//    char str[100]="qian feng";

//    char *pstr = str;

//    printf("%ld\n", sizeof(str));

//    

//    printf("%ld\n", my_strlen(str));

//    

//    printf("%ld\n", sizeof(pstr));//求的是指针变量占用的内存空间大小

//    printf("%ld\n", strlen(pstr));

//

//    return 0;

//}

 

//字符串比较函数

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

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

 

//size_t : 限制最大比较字符个数

 

//返回值 大于0    str1 > str2

//      等于0    str1 == str2

//      小于0    str1 < str2

 

//int my_strcmp(const char *str1, const char *str2)

//{

//    while (*str1==*str2 && *str1 && *str2) {

//        str1++;

//        str2++;

//    }

//    return *str1-*str2;

//}

//

//int main(int argc,const char *argv[])

//{

//    char *str1 = "abcdefgh";

//    char *str2 = "abc";

//    

//    int ret = my_strcmp(str1, str2);

//    printf("ret = %d\n", ret);

//    

//    ret = strncmp(str1, str2, 7);

//    printf("ret = %d\n", ret);

//

//    return 0;

//}

 

//字符串查找

//strchr

//char *strchr(const char *, int);

//从左往右查找字符在原字符串中第一次出现的位置,找不到返回NULL

//strrchr

//char *strrchr(const char *, int);

//倒序查找字符, 找到第一次出现的位置返回,找不到返回NULL

char *my_strchr(const char *src, char ch)

{

    while (*src) {

        if (*src==ch) {

            return (char *)src;

        }

        src++;

    }

    return NULL;

}

 

char *my_strrchr(const char *src, char ch)

{

    size_t len = strlen(src);

    for (long i=len; i>=0; i--) {

        if (*(src+i)==ch) {

            return (char *)(src+i);

        }

    }

    return NULL;

}

 

//int main(int argc,const char *argv[])

//{

//    char *str = "hello world";

//    

//    printf("%s\n", my_strchr(str, ‘o‘));

//    

//    printf("%s\n", my_strrchr(str, ‘o‘));

//

//

//    return 0;

//}

 

//字符串拷贝

//char *strcpy(char *dest, const char *src);

//dest 跟 src指向的内存不能有重叠的部分

//dest 空间足够容纳src字符串

 

//char *strncpy(char *dest, const char *src, size_t len);

//len 限定最多可以向dest缓冲区中拷贝的字符个数

//len = sizeof(dest)-1

 

char *my_strcpy(char *dest, const char *src)

{

    char *temp = dest;

    while (*src) {

        *temp = *src;

        temp++;

        src++;

    }

    *temp = ‘\0‘;

    return dest;

}

 

char *my_strncpy(char *dest ,const char *src, size_t     len)

{

    size_t i=0;

    char *temp = dest;

    while (*src && i<len) {

        *temp = *src;

        temp++;

        src++;

        i++;

    }

    if (i<len) {

        *temp = ‘\0‘;

    }

    return dest;

}

 

//int main(int argc, const char *argv[])

//{

//    char dest[100]="qianfengABCDEF";

//    char *src = "helloworld";

//    //printf("%s\n", my_strcpy(dest, src));

//    //printf("%s\n", dest);

//  //  printf("%s\n", strcpy(dest, &dest[4]));//strcpy 操作的字符串内存不能重叠

//    

//    printf("%s\n", my_strncpy(dest, src, 100-1));

//    return 0;

//}

 

//字符串拼接

//char *strcat(char *dest, const char *src);

//1.确定dest剩余的内存空间足够容纳src字符串

//char *strncat(char *dest, const char *src, size_t len);

//len = sizeof(dest)-strlen(dest)-1;

//len 允许最多可以拼接到dest缓冲区中的字符个数,拼接后,在新的字符串的末尾添加‘\0‘;

 

char *my_strcat(char *dest, const char *src)

{

    size_t len = strlen(dest);

    int i=0;

    while (*src) {

        *(dest+len+i)= *src;

        src++;

        i++;

    }

    *(dest+len+i)=‘\0‘;

    return dest;

}

char *my_strncat(char *dest ,const char *src, size_t     len)

{

    size_t i=0;

    size_t size = strlen(dest);

    char *temp = dest+size;

    while (*src && i<len) {

        *temp = *src;

        temp++;

        src++;

        i++;

    }

    *temp = ‘\0‘;

    return dest;

}

 

//int main(int argc,const char *argv[])

//{

//    char dest[21]="hello world";

//    dest[20]=‘A‘;

//    dest[16]=‘W‘;

//    char *src = "qian feng";

//    //printf("%s\n",my_strcat(dest, src));

//    

//    printf("%s\n",my_strncat(dest, src,4));

//    

//    return 0;

//}

 

//字符串分割

//strtok

//char *strtok(char *src, const char *demi);

 

//int main(int argc,const char *argv[])

//{

//    char src[100]="root:qian;:feng,:jiao;yu";

//    char *ps = strtok(src, ";,:");//底层把分割符变成‘\0‘

//    printf("%p %s\n",ps,ps);//分割符一定用双引号包含,哪怕只有一个字符

//    printf("%p %s\n",src,src);

//    

//    ps = strtok(NULL, ":;,");

//    printf("%s\n", ps);

//

//    ps = strtok(NULL, ":;,");

//    printf("%s\n", ps);

//

//    ps = strtok(NULL, ":;,");

//    printf("%s\n", ps);

//

//    ps = strtok(NULL, ":;,");

//    printf("%s\n", ps);

//

//    return 0;

//}

 

//int main(int argc,const char *argv[])

//{

//    char str[100]="root:qian;:feng,:jiao;yu";

//    

//    char *pstr = str;

//    while ((pstr = strtok(pstr, ":;,"))) {

//        printf("%s\n",pstr);

//        pstr = NULL;

//    }

//

//    return 0;

//}

 

 

 

//查找子串

//strstr

//char *strstr(const char *src, const char *subStr);

//返回子串在原串中第一次出现的地址,原串中没有该子串返回NULL

char *my_strstr(const char *src, const char *substr)

{

    char *sub = (char *)substr;

    while (*src) {

        char *temp = (char *)src;

        while (*src++ == *substr++) {

            if (*substr == ‘\0‘) {

                return temp;

            }

        }

        src = temp+1;

        substr = sub;

    }

    return NULL;

}

//int main(int argc,const char *argv[])

//{

//    char src[100]="hello wwworldqian world feng";

//    printf("%s\n", my_strstr(src, "world"));

//    

//    return 0;

//}

//"qianarefengarejiaoareyu"

//"are"

//qian feng jiao yu

//int main(int argc,const char *argv[])

//{

//    char str[100]="qianarefengarejiaoareyu";

//    char *p,*q;

//    p = q = str;

//    int len = strlen("are");

//    while ((p = strstr(p, "are"))) {

//        *p = ‘\0‘;

//        printf("%s\n",q);

//        p+= len;

//        q = p;

//    }

//    if (*q) {

//        printf("%s\n", q);

//    }

//    return 0;

//}

 

//sscanf sprintf

//int sscanf(const char * , const char * , ...)

//int sprintf(char * , const char * , ...);

 

int main(int argc,const char *argv[])

{

    char str[100]="$GPGGA,4250.5589,S,14718.5084,E";

    char header[100]={};

    char ch1, ch2;

    float south;

    float east;

    sscanf(str, "%6s,%f,%c,%f,%c",header,&south,&ch1,&east,&ch2);

    printf("%.2f %.2f\n", south, east);

 

    char buf[100];

    sprintf(buf, "%d***%d",12,45);

    printf("%s\n", buf);

    

    return 0;

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。