#include <stdio.h>
//1.字符串排序。比较三个字符串的大小,然后按从小到大的顺序将字符串输出。
//比如:
//输入
//asdfwd
//ddrwf
//ffweff
//输出为
//asdfwd
//ddrwf
//ffweff
//
//输入
//sgfgeasdfw
//aabbe
//wrwwdfaf
//输出为
//aabbe
//sgfgeasdfw
//wrwwdfaf
#include <stdlib.h>
#include <string.h>
#if 0
int main(int argc,const char * argv[])
{
char *pstr[10]={NULL};
int cnt = 0;
for (int i=0; i<10; i++) {
pstr[i]=(char *)calloc(100,1);
if (!pstr[i]) {
return -1;
}
scanf("%s",pstr[i]);
cnt++;
if (getchar()=='\n') {
break;
}
}
for (int i=0; i<cnt-1; i++) {
for (int j=0; j<cnt-i-1; j++) {
if (strcmp(pstr[j], pstr[j+1])>0) {
char *temp = pstr[j];
pstr[j]=pstr[j+1];
pstr[j+1]=temp;
}
}
}
for (int i=0; i<cnt; i++) {
printf("%s\n", pstr[i]);
free(pstr[i]);
pstr[i]=NULL;
}
return 0;
}
#endif
//2.
//查找一个字符在字符串1中第一次出现的字符位置,
//比如:
//输入
//asdfwd
//d
//输出为
//2
//
//输入
//hhff
//h
//输出为
//0
//int main(int argc,const char *argv[])
//{
// char str[100];
// char ch;
// scanf("%s %c", str, &ch);
// char *pstr = strchr(str, ch);
// printf("%lu\n", pstr-str);
// return 0;
//}
//3.求一个字符串s的最大连续递增数字子串。
//
//
//比如:
//输入
//f123fffwf3210a1234
//输出为
//123
//
//输入
//abcd765bbw1357f12
//输出为
//123
#include <ctype.h>
//int main(int argc,const char *argv[])
//{
// char str[100];
// char *pstr = str;
// char *pmax = NULL;
// int maxlen=0;
// int cnt=0;
// scanf("%s", str);
// while (*pstr)
// {
// if (isdigit(*pstr))
// {
// cnt = 1;
// while (*pstr == *(pstr+1)-1) {
// cnt++;
// pstr++;
// }
// pstr++;
// if (maxlen < cnt) {
// maxlen = cnt;
// pmax = pstr -cnt;
// cnt = 0;
// }
// }
// else
// {
// pstr++;
// }
// }
//
// if (pmax) {
// *(pmax + maxlen)='\0';
// printf("%s\n", pmax);
// }
// return 0;
//}
//字符串压缩算法,把输入的字符串压缩处理后的结果保存到第二个字符串中,并输出。
//比如:
//输入:aaaaaaaaaaaeefggg
//输出为:a11e2f1g3
//输入:eeeeeaaaff
//压缩为:e5a3f2
//int main(int argc,const char *argv[])
//{
// char str[100];
// char buf[100];
// scanf("%s", str);
// char *pbuf = buf;
// char *pstr = str;
// char ch = *pstr;
// int cnt = 0;
// int val=0;
// while (*pstr)
// {
// if (*pstr == ch)
// {
// cnt++;
// }
// else
// {
// val = sprintf(pbuf, "%c%d",ch,cnt);
// pbuf+=val;
// cnt=0;
// ch = *pstr;
// pstr--;
// }
// pstr++;
// }
// val = sprintf(pbuf, "%c%d", ch, cnt);
// pbuf+=val;
// *pbuf='\0';
// printf("%s\n", buf);
// return 0;
//}
//5.
// 字符串解压缩算法,把输入字符串解压处理后结果保存在第二个字符串中,并输出。
// 比如:
// 输入:a11e2f1g3
// 输出:aaaaaaaaaaaeefggg
// 输入:e5a3f2
// 输出:eeeeeaaaff
char * str_write(char *pstr,char ch, int len)
{
for (int i=0; i<len; i++) {
pstr[i]=ch;
}
pstr[len]='\0';
return pstr;
}
int main(int argc,constchar *argv[])
{
char str[100];
char buf[100];
scanf("%s", str);
char *pstr = str;
char *pbuf = buf;
char ch;
int len = 0;
while (*pstr)
{
ch = *pstr;
sscanf(pstr, "%c%d", &ch, &len);
str_write(pbuf, ch, len);
pbuf += len;
pstr++;
while (isdigit(*pstr))
{
pstr++;
}
}
// pbuf = buf;
// pstr = str;
printf("%s\n", buf);
return 0;
}
--------------------
字符串与指针
#include<stdio.h>
//指针数组: int *p[10]
//数组指针: int (*p)[10]
//函数指针: int (*pfunc)(int , int)
//字符: 'A' 'a'
#include<ctype.h>
//int isalnum(int);
//int isalpha(int);
//int isdigit(int);
//int isgraph(int);
//int islower(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("alnum = %d\n", isalnum('A'));//判断是否为数字或者字母
// printf("alpha = %d\n", isalpha('a'));//判断是否为字母是返回1,反之返回0
// printf("isdigit = %d\n", isdigit('9'));//判断是否为十进制数字字符
// printf("isgraph = %d\n",isgraph('\t'));//判断是否为可见字符
// printf("islower = %d\n", islower('a'));//判断是否为小写字母
// printf("isspace = %d\n",isspace(' '));//判断是否为空格
// 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'));//把十六进制字符转换成十进制整型
// printf("ishexnumber = %d\n",ishexnumber('e'));//类似isxdigit()
// printf("isnumber = %d\n",isnumber('F'));//类似isdigit()
//
// return 0;
//}
//字符串
//"qianfeng"
//char str[20]="hello world";
//
//'0' 0 "0" '\0' "\0"
//1.字符串中每个字符占用一个字节内存空间
//2.字符串必须以'\0'表示结束
//3.字符串要用双引号括起来
//字符串有效长度(不包含'\0')
//strlen()
//求变量或者常量占用内存空间大小
//sizeof()//
//区别:
//1.strlen求字符串有效长度,sizeof求变量或者常量占用内存空间大小;
//2.strlen是一个函数,在函数调用的时候执行,sizeof是一个运算符,在编译的执行
#include<string.h>
//unsigned long mystrlen(char *src)
//{
// char *pstr = src;
// unsigned long len=0;
// while (*pstr!='\0') {
// len++;
// pstr++;
// }
// return len;
//}
//int main(int argc,const char *argv[])
//{
// //char str[4]={'a','b','c','d'};
//
// //printf("%lu\n", sizeof("\0"));
// //printf("%lu\n", strlen("hello world"));
// //printf("len = %lu\n",strlen(str));
// printf("%lu\n", mystrlen("qinafeng"));
// return 0;
//}
//
#include<string.h>
//字符串拷贝函数
//字符串不能直接赋值,
//strcpy strncpy
//char *strcpy(char *dest, const char *src);
//strcpy拷贝包含'\0'
//dest跟src指向的内存空间不呢过重叠(段错误)
//dest指向的内存空间足够容纳src
//自己实现一个mystrcpy
//char *mystrcpy(char *dest, const char *src)
//{
// char *pstr = dest;
// while (*src) {
// *pstr = *src;
// pstr++;
// src++;
// }
// *pstr = '\0';
// return dest;
//}
//
//
//int main(int argc,const char *argv[])
//{
// //char str1[20]="hello world";
// char str1[100];
// char str2[20]="qianfenghelloworld";
// mystrcpy(str1, str2);
// printf("%s\n", mystrcpy(str1, str2));
//// strcpy(str1, str2);
// //printf("%s\n", strcpy(str1, str2));
//// printf("%s\n",&str1[9]);
//
//// strcpy(str1, &str1[5]);
//// printf("%s\n",str1);
//
// return 0;
//}
//char *strncpy(char *dest, const char *src, size_t size);
//size_t == unsigned long
//size_t size:允许从src指向的字符串中最多拷贝到dest中的字节数
//strncpy拷贝后得到的字符串不一定以'\0'结束
//dest跟src指向的内存空间不呢过重叠
//自己实现char * mystrncpy(char *dest, const char *src, size_t size);
//int main(int argc, const char *argv[])
//{
// char str1[100];
// char str2[20]="hello world";
// strncpy(str1, str2, 99);
// str1[99]='\0';
// printf("%s\n", str1);
// return 0;
//}
//字符串拼接函数
//strcat strncat
//char *strcat(char *dest , const char *src);
//dest src指向的内存不能重叠
//dest剩下的内存足够容纳src指向的字符串长度
//char *mystrcat(char *dest, const char *src)
//{
// size_t len = strlen(dest);
// char *pstr = dest+len;
// while (*src)
// {
// *pstr = *src;
// pstr++;
// src++;
// }
// *pstr = '\0';
// return dest;
//}
//
//int main(int argc,const char *argv[])
//{
// char dest[100]="hello world";
// char src[50]="qian feng";
// //printf("%s\n", strcat(dest, src));
// printf("%s\n", mystrcat(dest, src));
// //printf("%s\n", strcat(dest, &dest[3]));
//
// return 0;
//}
//char *strncat(char *dest , const char *src, size_t size);
//size :允许从src中最大拷贝字节数
//得到的新字符串自动添加'\0';
//int main(int argc,const char *argv[])
//{
// char str1[20];
// str1[18]='@';
// str1[19]='\0';
// char str2[40]="qianfengyuioprtyuiopertyu";
//
// //strncat(str1, str2, sizeof(str1) - strlen(str1) - 1);
// strncat(str1, str2, 18);
// printf("%s\n", str1);
// return 0;
//}
//字符串比较函数
//strcmp
//int strcmp(const char *str1, const char *str2);
//返回值:
//大于0 str1 > str2
//等于0 str1== str2
//小于0 str1 < str2
//int mystrcmp(char *str1,char *str2)
//{
// while (*str1 && *str2) {
// if (*str1!=*str2) {
// //return *str1-*str2;
// break;
// }
// str1++;
// str2++;
// }
// return *str1-*str2;
//}
//
//
//int main(int argc,const char *argv[])
//{
// char *str1="hello wabcd";
// char *str2="hello wabbd";
//
// //printf("val = %d\n", strcmp(str1, str2));
// printf("val = %d\n", mystrcmp(str1, str2));
//
// return 0;
//}
//strncmp
//int strncmp(const char *str1, const char *str2, size_t size);
//size :表示最大比较字节数
//int main(int argc,const char *argv[])
//{
// char *str1 = "hellowo";
// char *str2 = "helloworld";
//// printf("val = %d\n",strncmp(str1, str2, (size_t)sizeof(str1)));
// printf("val = %d\n",strncmp(str1, str2, 11));
// return 0;
//}
//以空格作为分隔符,统计单词个数
//"qian feng hello world"
//" qian feng hello world"
//int word_number(const char *str)
//{
// int cnt=0;
// int flag=0;
// while (*str)
// {
// if (*str!=' ')
// {
// if (!flag)
// {
// cnt++;
// flag=1;
// }
// }
// else
// {
// if (flag) {
// flag =0;
// }
// }
// str++;
// }
// return cnt;
//}
//int main(int argc, const char *argv[])
//{
// char str[100]={};
// scanf("%[^\n]", str);
// printf("%d\n", word_number(str));
//
// return 0;
//}
//字符查找函数
//strchr strrchr
//char *strchr(const char *src, char ch);
//查找在src中第一次出现的字符ch,把字符的地址返回
//没有找到返回null
//char *mystrchar(const char *src, char ch)
//{
// while (*src) {
// if (*src==ch) {
// return (char *)src;
// }
// src++;
// }
// return NULL;
//}
//int main(int argc,const char *argv[])
//{
// char str[]="hello world";
// //printf("%s\n", strchr(str, 'H'));
// printf("%s\n", mystrchar(str,'w'));
// return 0;
//}
//char *strrchr(const char *src, char ch);
//倒序查找字符
//char *mystrrchr(const char *src, char ch)
//{
// long len = strlen(src);
// char *pstr = (char *)src+len-1;
// for (long i=len-1; i>=0; i--) {
// if (*pstr==ch) {
// return pstr;
// }
// pstr--;
// }
// return NULL;
//}
//
//int main(int argc,const char *argv[])
//{
// char *str="hello world";
// printf("%s\n", mystrrchr(str, 'o'));
// return 0;
//}
//字符串查找函数
//strstr
//char *strstr(const char *, const char *);
//找到字串返回字串在原串中的地址没有找到返回null
//int main(int argc,const char *argv[])
//{
// char str[]="qianfenghellofengworldfengzhang";
//
// //printf("%s\n", strstr(str, "feng"));
// char *pstr1, *pstr2;
// pstr1 = pstr2 = str;
// while ((pstr2 = strstr(pstr2, "feng")))
// {
// *pstr2 = '\0';
// printf("%s\n", pstr1);
// pstr2+=strlen("feng");
// pstr1 = pstr2;
// }
// printf("%s\n", pstr1);
// return 0;
//}
//字符串分割函数
//strtok
//char *strtok(char *src, const char *demi);
//1.分割符必须用双引号包含
//2.首次分割,传字符串首地址,从第二次的开始传NULL
//3.每次分割后,返回分割后的字符串地址
intmain(intargc,constchar*argv[])
{
charstr[]="hello:world,:qian;;:,feng*&hello;:";
// char *pstr = strtok(str, ":");
// printf("%s\n", pstr);
// pstr = strtok(NULL, ":;,*&");
// printf("%s\n", pstr);
char*pstr=str;
while((pstr=strtok(pstr,":;,*&"))) {
printf("%s\n", pstr);
pstr =NULL;
}
return0;
}
//scanf
//标准输入文件缓冲区stdin
//printf
//标准输出文件缓冲区stdout
// char pstr[20]="
//字符串解析函数
//sscanf
//从字符缓冲区中解析数据到内存变量中
//int sscanf(const char *src, const char *format, ...)
//sprintf
//int sprintf(char *dst, const char *format, ...)
/*int main(int argc,const char *argv[])
{
// int a, b;
// scanf("%d%d",&a,&b);
// printf("a = %d b = %d\n", a, b);
// char str[]="#123*23.4#";
// int a;
// float b;
// sscanf(str, "#%d*%f#",&a, &b);
// printf("a = %d b= %.2f\n", a, b);
int a = 39;
float b = 3.14;
char *str = "hello world";
char buf[500];
sprintf(buf, "%d%f%s", a,b,str);
printf("%s\n", buf);
return 0;
}*/
//文件解析函数
//fscanf fprintf
//int fprintf(FILE * file, const char * format, ...)
//int fprintf(FILE * file, const char * format, ...)
/*int main(int argc,const char *argv[])
{
// int a, b;
// fscanf(stdin, "%d%d", &a, &b);
// fprintf(stdout, "a= %d b= %d\n", a, b);
// FILE *pfile=NULL;
// pfile = fopen("/Users/zhangxueming/Desktop/file.rtf", "w");
// if (pfile) {
// printf("hello world\n");
// fwrite("中国教育", sizeof("中国教育"), 1, pfile);
// fclose(pfile);
// }
return 0;
}*/
//atoi
//double atof(const char *);
//int atoi(const char *);
//long atol(const char *);
//#include <stdlib.h>
//
//int myatoi(const char *str)
//{
// int inter=1;
// int number = 0;
// while (isspace(*str))
// {
// str++;
// }//跳过空字符
// if (*str=='-') {
// inter = -1;
// }
// if (*str=='-' || *str=='+') {
// str++;
// }
// while (isdigit(*str)) {
// number=number*10 + *str-'0';
// str++;
// }
// return number;
//}
//int main(int argc,const char *argv[])
//{
//
// printf("%d\n", myatoi(" +34b456"));
// printf("%f\n", atof("-3.145gt"));
// return 0;
//}
//myitoa