字符串练习


#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'

//destsrc指向的内存空间不呢过重叠(段错误)

//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'结束

//destsrc指向的内存空间不呢过重叠


//自己实现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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值