// // 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\n", isalnum('a'));//判断是否为字母或者数字字符 // printf("isalpha = %d\n", isalpha('A'));//判断是否为英文字母字符 // printf("isdigit = %d\n", isdigit('8'));//判断是否为十进制数字字符 // printf("isgraph = %d\n", isgraph('\t'));//判断是否为可见字符 // printf("islower = %d\n", islower('a'));//判断是否为小写字母 // printf("isupper = %d\n", isupper('A'));//判断是否为大写字母 // printf("isxdigit = %d\n", isxdigit('F'));//判断是否为十六进制字符 // printf("tolower = %c\n", tolower('A'));//把大写字母转换成小写字母 // printf("toupper = %c\n", toupper('a'));//把小写字母转换成大写字母 // printf("digittoint = %d\n", digittoint('f'));//把十六进制字符转换成整型 // return 0; //} //字符串 //"hello world" //1.字符串中的每一个字符占1个字节 //2.字符串必须用""包含 //3.字符串的末尾必须要有'\0' //4.打印字符串用%s占位符,只需要传递字符串的首地址 //5.字符串可以用字符数组存储或者存储在堆内存中 //int main(int argc,const char *argv[]) //{ // char str[]="hello world";//省约数组的长度 必须初始化数组 // printf("size = %lu\n", sizeof(str)); // printf("%s\n", 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\n", str1); // printf("str2 = %s\n", str2); // return 0; //} //字符串的长度(字符串的有效长度,有效长度不包含'\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\n", sizeof(str1)); // // printf("length = %lu\n", 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]='\0'; return dest; } //int main(int argc,const char *argv[]) //{ // char *str1="hello worldqianfeng"; // char str2[100]={}; // // //printf("str2 = %s\n",mystrcpy(str2, str1)); // //printf("str2 = %s\n", str2); // printf("str2 = %s\n", 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\n", mystrchr(str, 'o')); // // printf("%s\n", 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\n", mystrcmp(str1, str2)); // // printf("ret = %d\n", 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) = '\0'; return s1; } //int main(int argc,const char *argv[]) //{ // char str1[100]="helloworld"; // char str2[]="qianfeng"; // // str1[18]='#'; // //// printf("str = %s\n", 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\n", pstr); //// //// pstr = strtok(NULL, "* "); //// printf("pstr = %s\n", pstr); // // char *pstr= str; // while ((pstr = strtok(pstr, "# *:"))) { // printf("pstr = %s\n", pstr); // pstr= NULL; // } // //printf("pstr = %s\n", pstr); // // return 0; //} //查找子串函数 //char *strstr(const char *src, const char *substr); //int main(int argc,const char *argv[]) //{ // char *src = "helloworldqianfeng"; // // printf("str = %s\n", 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 = '\0'; // printf("%s\n", q); // p+=len; // q = p; // } // if (*q) { // printf("%s\n",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\n", buf); printf("ret = %d\n", ret); char *src ="#[email protected]*"; int b; float f2; ret = sscanf(src, "#%d@%f*",&b, &f2); printf("b = %d f2 = %.2f\n", b, f2); printf("ret = %d\n", ret); return 0; }