字符串

//
//  main.c
//  字符串
//
//  Created by zhangxueming on 15/6/5.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#include <stdio.h>
#include <ctype.h>

//字符操作函数
//int     isalnum(int);
//int     isalpha(int);
//int     isdigit(int);
//int     isgraph(int);
//int     islower(int);
//int     isupper(int);
//int     isxdigit(int);
//int     tolower(int);
//int     toupper(int);
//int     digittoint(int);
//int     ishexnumber(int);//等同于 isxdigit
//int     isnumber(int);//等同于 isdigit

//int main(int argc, const char * argv[]) {
//    
//    printf("isalnum = %d
", isalnum('a'));//判断是否为字母或者数字字符
//    printf("isalpha = %d
", isalpha('A'));//判断是否为英文字母字符
//    printf("isdigit = %d
", isdigit('8'));//判断是否为十进制数字字符
//    printf("isgraph = %d
", isgraph('	'));//判断是否为可见字符
//    printf("islower = %d
", islower('a'));//判断是否为小写字母
//    printf("isupper = %d
", isupper('A'));//判断是否为大写字母
//    printf("isxdigit = %d
", isxdigit('F'));//判断是否为十六进制字符
//    printf("tolower = %c
", tolower('A'));//把大写字母转换成小写字母
//    printf("toupper = %c
", toupper('a'));//把小写字母转换成大写字母
//    printf("digittoint = %d
", digittoint('f'));//把十六进制字符转换成整型
//    return 0;
//}

//字符串
//"hello world"
//1.字符串中的每一个字符占1个字节
//2.字符串必须用""包含
//3.字符串的末尾必须要有''
//4.打印字符串用%s占位符,只需要传递字符串的首地址
//5.字符串可以用字符数组存储或者存储在堆内存中

//int main(int argc,const char *argv[])
//{
//    char str[]="hello world";//省约数组的长度 必须初始化数组
//    printf("size = %lu
", sizeof(str));
//    printf("%s
", str);
//    return 0;
//}

//int main(int argc, const char *argv[])
//{
//    char str1[]="hello world";
//    char *str2 ="hello world";
//    
//    str1[5]='A';
//    //*(str2+5) = 'A';//str2指针指向字符串常量, 不能修改字符串常量
//    printf("str1 = %s
", str1);
//    printf("str2 = %s
", str2);
//    return 0;
//}

//字符串的长度(字符串的有效长度,有效长度不包含'')
//"hello world"

#include <string.h>

//unsigned long <==> size_t
//size_t strlen(const char *src);

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

//int main(int argc,const char *argv[])
//{
//    char str1[]="hello world";
//    
//    printf("size = %lu
", sizeof(str1));
//    
//    printf("length = %lu
", mystrlen(str1));
//    
//    return 0;
//}

//字符串拷贝函数
//char    *strcpy(char *dest, const char *src);
//注意:dest指针指向的内存空间足够容纳src字符串
//char    *strncpy(char *dest, const char *src, size_t n);
//dest:目的缓冲区
//src: 源字符串
//n: 最多拷贝的字符个数

char *mystrcpy(char *dest, const char *src)
{
    int i=0;
    while (src[i]) {
        dest[i]=src[i];
        i++;
    }
    dest[i]='';
    return dest;
}

//int main(int argc,const char *argv[])
//{
//    char *str1="hello worldqianfeng";
//    char str2[100]={};
//    
//    //printf("str2 = %s
",mystrcpy(str2, str1));
//    //printf("str2 = %s
", str2);
//    printf("str2 = %s
", strncpy(str2, str1, 100));
//    return 0;
//}

//字符查找函数
//strchr 正序查找字符, 返回在字符在源字符串中第一次出现的位置(地址)
//char    *strchr(const char *src, int c);
//strrchr 倒序查找字符, 返回在字符在源字符串中第一次出现的位置(地址)
//char    *strrchr(const char *src, int c);

char *mystrchr(const char *src, char ch)
{
    int i=0;
    while (*(src+i)) {
        if (*(src+i)==ch) {
            return (char *)(src+i);
        }
        i++;
    }
    return NULL;
}

//int main(int argc,const char *argv[])
//{
//    char *str="hello world";
//    
//    printf("%s
", mystrchr(str, 'o'));
//    
//    printf("%s
", strrchr(str, 'o'));
//    return 0;
//}

//字符串比较函数
//strcmp
//int     strcmp(const char *, const char *);
//strncmp
//int     strncmp(const char *s1, const char *s2, size_t n);
//n: 最大比较字符个数

//ret > 0   str1 > str2
//ret < 0   str1 < str2
//ret ==0   str1 == str2

int mystrcmp(const char *str1, const char *str2)
{
    int i=0;
    while (str1[i] && str2[i] && str1[i]==str2[i]) {
        i++;
    }
    return str1[i]-str2[i];
}

//int main(int argc,const char *argv[])
//{
//    char *str1="hello world";
//    char *str2="hello world";
//    
//    printf("ret = %d
", mystrcmp(str1, str2));
//    
//    printf("ret = %d
", strncmp(str1, str2, 20));
//    return 0;
//}


//字符串拼接函数
//strcat
//char    *strcat(char *s1, const char *s2);
//strncat
//char    *strncat(char *s1, const char *s2, size_t n);
//n: 最多可以往s1中拷贝的字符个数

char *mystrcat(char *s1, const char *s2)
{
    int len = (int)strlen(s1);
    int i=0;
    while (*(s2+i)) {
        *(s1+len+i)=*(s2+i);
        i++;
    }
    *(s1+len+i) = '';
    return s1;
}

//int main(int argc,const char *argv[])
//{
//    char str1[100]="helloworld";
//    char str2[]="qianfeng";
//    
//    str1[18]='#';
//    
////    printf("str = %s
", mystrcat(str1, str2));
////    
////    printf("char = %c", str1[18]);
//
//    printf("str = %s", strncat(str1, str2, 89));
//    
//    return 0;
//}
//

//字符串分割函数
//strtok
//char    *strtok(char *src, const char *demi);
//src : 被分割的字符串
//demi: 分割符字符串 一定要用双引号包含

//int main(int argc,const char *argv[])
//{
//    char str[100]="hello world* qian #:feng";
//    
////    char *pstr = strtok(str, " ");
////    printf("pstr = %s
", pstr);
////    
////    pstr = strtok(NULL, "* ");
////    printf("pstr = %s
", pstr);
//    
//    char *pstr= str;
//    while ((pstr = strtok(pstr, "# *:"))) {
//        printf("pstr = %s
", pstr);
//        pstr= NULL;
//    }
//    //printf("pstr = %s
", pstr);
//    
//    return 0;
//}

//查找子串函数
//char    *strstr(const char *src, const char *substr);

//int main(int argc,const char *argv[])
//{
//    char *src = "helloworldqianfeng";
//    
//    printf("str = %s
", strstr(src, "world"));
//
//    return 0;
//}

//输入两个字符串,以第二个字符串整体作为分割条件把第一个字符串进行分割,然后输出分割之后的单词。
//比如:
//输入:
//Hi#@welcome#@to#@qianfeng
//#@
//输出:
//Hi
//welcome
//to
//qianfeng

//Hi#@wel@come#@to#@qian#feng
//Hi
//wei@come
//to
//qian#feng

//int main(int argc,const char *argv[])
//{
//    char src[100]={};
//    char substr[50]={};
//    scanf("%s%s", src, substr);
//    char *p,*q;
//    p = q = src;
//    
//    int len = (int)strlen(substr);
//    while ((p= strstr(p, substr))) {
//        *p = '';
//        printf("%s
", q);
//        p+=len;
//        q = p;
//    }
//    if (*q) {
//        printf("%s
",q);
//    }
//    return 0;
//}

//sprintf
//int     sprintf(char * , const char * , ...)
//格式化往字符缓冲区中写入字符串
//sscanf
//int     sscanf(const char * , const char * , ...)

int main(int argc,const char *argv[])
{
    char buf[100]={};
    int a=100;
    float f= 3.14;
    
    int ret = sprintf(buf,"###%d***%.2f$$$",a,f);
    printf("buf = %s
", buf);
    printf("ret = %d
", ret);
    
    char *src ="#34@5.46*";
    
    int b;
    float f2;
    
    ret = sscanf(src, "#%d@%f*",&b, &f2);
    
    printf("b = %d f2 = %.2f
", b, f2);
    printf("ret = %d
", ret);
    
    return 0;
}
原文地址:https://www.cnblogs.com/0515offer/p/4554997.html