C 字符串指针的应用

来源:互联网 发布:中兴通开票软件下载 编辑:程序博客网 时间:2024/06/05 05:00

这个简单,就只放大招了。

#include <stdio.h> #include <Windows.h>#pragma warning(disable:4996)//函数功能:字符串拷贝函数//函数参数:strDest为目标串,strSource为源串//函数返回:真或假char strCpy(char *pDest, char *pSrc){//如果给定的字符串都为空直接返回if(pDest==NULL || pSrc==NULL)return false;    //如果不为空,字符串赋值while((*pDest++ = *pSrc++)!='\0'){}return true;}//函数功能:字符串的内存拷贝//函数参数:strDest为目标串,strSrc为源串,nLen为要拷入的长度//函数返回:strD为拷入后的字符串void *memcpy(void *pDest, void *pSrc, int nLen){DWORD*p, *q;//定义DWORD类型的指针来四个字节拷贝BYTE    *b, *d;//定义BYTE类型的指针来一个字节的拷贝int i,n, m;    //判断目标串和远程是否为空if (pDest == NULL || pSrc == NULL)   return NULL;//给DWORD类型指针赋值p = (DWORD*)pDest;q = (DWORD*)pSrc;n = nLen/4;m = nLen%4; //以四个字节开始拷贝for (i = 0; i< n; i++){*p++ = *q++;}//不足四个字节的一一进行拷贝//给BYTE类型指针初始化b = (BYTE*)p;d = (BYTE*)q;//以一个字节进行拷贝    for (i = 0; i< m; i++)    {*b++ = *d++;    }return pDest;}//函数功能:从字符串中删除所有的字符//函数参数:strDest为目标串,pSrc为给定字符//函数返回:strD为删除后的字符char strDel(char *pDest,char pSrc){char*a1, *a2;    //源字符串不能为空,如果为空则返回错误 if(pDest == NULL)return false;    //a1 a2 指向源字符串,后续改变指针变量的值相当于改变源字符串的值a1=a2=pDest;//在源字符串中寻找指定字符while(*a2++){//如果找到了,使指定的字符赋值成下一个,跳过去if(*a2 != pSrc)*a1++ = *a2;}//结束    *a1='\0';return true;}//函数功能:计算目标值的阶乘//函数参数:a 为目标值//函数返回:目标值的阶乘值int fac(int a){if(a == 1||a == 0)return 1;elsereturn a*fac(a-1);}//函数功能:计算文本的大小//函数参数:文件指针//函数返回:文本大小int GetFilesSize(FILE *fp){    int nFileLen;fseek(fp,0,SEEK_SET);fseek(fp,0,SEEK_END);nFileLen = ftell(fp);return nFileLen;}//函数功能:计算文本有几行//函数参数:空//函数返回:文本行数int file(){FILE*fp;char*buf, *p;intn = 0;    intnFileLen;    //判断文件是否为空if((fp = fopen("file.txt","rb")) == NULL){printf("Wrong\n");}    //计算文本的长度    nFileLen = GetFilesSize(fp);//开辟一个内存空间来储存文本的值    buf = (char*)malloc(nFileLen + 0x1000);memset(buf, 0, nFileLen + 0x1000);fseek(fp, 0, SEEK_SET);    fread(buf, 1, nFileLen, fp);fclose(fp);        p = buf;//在文本中寻找换行字符while (p < buf + nFileLen){   //如果找到则加一if (*p == 0xa)n++;p++;}    //释放指针free(buf);    //返回n值return n;}//主函数void main(){char A[0x100] = "xysadasdasd";char B[0x100] = "abc任务而我去额";char C[0x100] = "abcaabc";char D = 'a';printf("字符串A为:%s\n",A);printf("字符串B为:%s\n",B);if(strCpy(A, B))printf("把字符串拷贝给A后,A为:%s\n", A);elseprintf("Wrong\n");printf("字符串C为:%s\n",C);printf("字符D为:%c\n",D);    if(strDel(C,D))        printf("字符串去除字符%c后,字符串为:%s\n",D,C);elseprintf("Wrong\n");    printf("5的阶乘为:%d\n",fac(5));        printf("file.txt文本由%d行\n",file());//BYTE WORD DWORD    memcpy(C, A, 7);printf("把字符串拷贝7个字节给C后,C为:%s\n",C);}

1 0
原创粉丝点击