c: string
/** * ***************************************************************************** * @file duSortType.h * @brief * @author () * @date 2023-10-18 * @copyright geovindu * ***************************************************************************** */ #include<ctype.h> #include<stdlib.h> #include<string.h> /** * @brief 整数从大到小排序 * @param a * @param b * @return */ int IntCmpDesc(const void *a,const void *b); /** * @brief 整数排序从小到大 * @param a * @param b * @return */ int IntCmpAsc(const void *a,const void *b); /** * @brief 排序从小到大 * @param a * @param b * @return */ int strCmpAsc(const void *srca,const void *srcb); /** * @brief 排序从大到小 * @param a * @param b * @return */ int strCmpDsc(const void *srca,const void *srcb);
/** * ***************************************************************************** * @file duSortType.c * @brief * @author () * @date 2023-10-18 * @copyright geovindu * ***************************************************************************** */ #include"include/duSortType.h" #include<ctype.h> #include<stdlib.h> #include<string.h> /** * @brief 整数从大到小排序 * @param a * @param b * @return */ int IntCmpDesc(const void *a,const void *b) { return *(int*)b-*(int*)a; } /** * @brief 整数排序从小到大 * @param a * @param b * @return */ int IntCmpAsc(const void *a,const void *b) { return *(int*)a-*(int*)b; } /** * @brief 排序从小到大 * @param a * @param b * @return */ int strCmpAsc(const void *a,const void *b) { return *(char*)a-*(char*)b; } /** * @brief 排序从大到小 * @param a * @param b * @return */ int strCmpDsc(const void *a,const void *b) { return *(char*)b-*(char*)a; }
/*****************************************************************//** * \file Dustring.h * \brief * IDE: VSCODE c11 * * int isdigit(int c) 如果c是一个数字,返回true,否则返同 false * int isalpha(int c) 如果c是一个字母,返回true,否则返回 false * int isalnum(int c) 如果 c 是一个字母或数字,返回 true,否则返同 false * int isxdigit(int c) 如果c是一个十六进制字符,返回 true,否则返回 false * int islower(int c) 如果c是一个小写字母,返回 true,否则返回 false * int isupper(int c) 如果c是一个大写字母,返回true,否则返回 false * int isspace(int c) 如果c是一个空白符,返回 true,否则返回 false 空白符包括,"n,空格,W,V进纸符(),垂直制表符(“v) * int iscntrl(int c) 如果c是一个控制符,返回 true ,否则返回 false * int ispunct(int c) 如果c是一个除空格、数字和字母外的可打印字符,返回 true,否则返回 false * int isprint(int c) 如果c 是一个可打印符 (包括空格),返回 true,否则返回 false * int isgraph(int c) 如果c 是除空格之外的可打印字符,返回 true,否则返回 false * 站在巨人的肩膀上 Standing on the Shoulders of Giants * \author geovindu,Geovin Du 涂聚文 * \date 2023-10-15 ***********************************************************************/ #ifndef DUSTRING_H #define DUSTRING_H #include<string.h> #include<stdio.h> #include<stdlib.h> #include<ctype.h> /** * @brief 从左截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param n 取几位 * @return char* 返回要截取的字符串 */ char *strLeft(char *dst,char *src,int n); /** * @brief 从右截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param n 取几位 * @return char* 返回要截取的字符串 */ char *strRight(char *dst,char *src,int n); /** * @brief 截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param start 开始位置 * @param len 取几位 * @return char* 返回要截取的字符串 */ char *strSubstring(char *dst,char *src,int start,int len); /** * @brief 字符串替换 * * @param search * @param replace * @param subject * @param bufsize * @return char* */ char *strReplace(const char *search, const char *replace, char *subject, int bufsize); /** * @brief 删除两端空格 * * @param scr * @return int */ int trim(char *scr); /** * @brief 字符字替换 * * @param src 原字符串 * @param oldstr 要替的旧字串 * @param newstr 要替成的新字串 * @return char* 返回替好的字符串 */ char *duReplace(char *src,char *oldstr,char *newstr); /** * @brief 排序OK * @param 原字符串数组 * @param 排序后的字符串数组 * @returns 返回值 不OK null */ char* duSortAsc(char* src,char* newchar,int lenght); /** * @brief 排序OK * @param 原字符串数组 * @param 排序后的字符串数组 * @returns 返回值 OK */ char* duSortAsc2(char* src,char* newchar[],int lenght); /** * @brief * @param dst * @param str * @param spl * 示例 * char str[] = "what is your name?"; * char dst[10][80]; * int cnt = split(dst, str, " "); * for (int i = 0; i < cnt; i++) * puts(dst[i]); * */ int strSplit(char dst[][80], char* str, const char* spl); /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ char* duStrCmpSortAsc(char* src,char* newchar[],int lenght); /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ char* duStrCmpSortDesc(char* src,char* newchar[],int lenght); /** * @brief 排序从小到大 * @param src 原字符串数组 * @param newint 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ int* duIntCmpSortAsc(int* src,int* newint[],int lenght); /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newint 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ int* duIntCmpSortDesc(int* src,int* newint[],int lenght); #endif
/*****************************************************************//** * \file Dustring.c * \brief 字符串操作 * IDE: VSCODE c11 *站在巨人的肩膀上 Standing on the Shoulders of Giants * * \author geovindu,Geovin Du 涂聚文 * \date 2023-10-15 ***********************************************************************/ #include "include/Dustring.h" #include<ctype.h> #include<stdlib.h> #include<string.h> #include "include/duSortType.h" /** * @brief 从左截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param n 取几位 * @return char* 返回要截取的字符串 */ char *strLeft(char *dst,char *src,int n) { char *p=src; char *q=dst; int len=strlen(src); //isupper() //islower() if(n>len) n=len; while(n--) *(q++)=*(p++); *(q++)='\0'; return dst; } /** * @brief 从右截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param n 取几位 * @return char* 返回要截取的字符串 */ char *strRight(char *dst,char *src,int n) { char *p=src; char *q=dst; int len=strlen(src); if(n>len) n=len; p+=(len-n); while(*(q++)=*(p++)); return dst; } /** * @brief 截取字符串 * * @param dst 要选择的字会串存储的数组(预设长度) * @param src 源字符串 * @param start 开始位置 * @param len 取几位 * @return char* 返回要截取的字符串 */ char *strSubstring(char *dst,char *src,int start,int len) { char *p=dst; char *q=src; int length=strlen(src); if(start>=length||start<0) return NULL; if(len>length) len=length-start; q+=start; while(len--) { *(p++)=*(q++); } *(p++)='\0'; return dst; } /** * @brief 字符串替换 * * @param search * @param replace * @param subject * @param bufsize * @return char* */ char *strReplace(const char *search, const char *replace, char *subject, int bufsize) { char *p; int i, j = 0, n = 0; int len, slen, rlen, tlen; // check arguments if (subject == NULL) { return NULL; } tlen = strlen(subject); if (bufsize == -1) { // make sure subject is writable p = malloc(tlen + 1); if (p == NULL) { return NULL; } memcpy(p, subject, tlen + 1); subject = p; } if (search == NULL || search[0] == '\0') { return subject; } slen = strlen(search); if (replace == NULL) { replace = ""; } rlen = strlen(replace); // find out how many replacements are needed for (i = 0; subject[i] != '\0'; i++) { if (subject[i] != search[j]) { // character mismatch j = 0; } if (subject[i] == search[j]) { j++; if (j == slen) { // pattern match subject[i + 1 - j] = '\0'; // front subject[i] = '\0'; // rear j = 0; n++; } } } if (n == 0) { return subject; } // calculate the length of the new string and check buffer size len = tlen + n * (rlen - slen); if (bufsize == -1) { if (len > tlen) { // increase buffer size p = realloc(subject, len + 1); if (p == NULL) { free(subject); return NULL; } subject = p; } } else if (bufsize < len + 1) { return NULL; } // replace substrings if (len <= tlen) { i = 0; // for read j = 0; // for write while (i < tlen) { if (subject[i] == '\0') { memcpy(subject + j, replace, rlen); i += slen; j += rlen; } else { subject[j] = subject[i]; i++; j++; } } } else { i = tlen - 1; j = len - 1; while (i >= 0) { if (subject[i] == '\0') { memcpy(subject + j + 1 - rlen, replace, rlen); i -= slen; j -= rlen; } else { subject[j] = subject[i]; i--; j--; } } } subject[len] = '\0'; return subject; } /** * @brief 删除两端空格 * * @param scr * @return int */ int trim(char *scr) { int i, j = -1, len = 0; for (i = 0; scr[i] != '\0'; i++) { if (j == -1 && scr[i] != ' ' && scr[i] != '\t') { j = 0; } if (j != -1) { scr[j] = scr[i]; j++; if (scr[i] != ' ' && scr[i] != '\t') { len = j; } } } scr[len] = '\0'; return len; } /** * @brief 字符字替换 * * @param src 原字符串 * @param oldstr 要替的旧字串 * @param newstr 要替成的新字串 * @return char* 返回替好的字符串 */ char *duReplace(char *src,char *oldstr,char *newstr) { char bstr[strlen(src)];//转换缓冲区 memset(bstr,0,sizeof(bstr)); for(int i = 0;i < strlen(src);i++){ if(!strncmp(src+i,oldstr,strlen(oldstr))){//查找目标字符串 strcat(bstr,newstr); i += strlen(oldstr) - 1; } else { strncat(bstr,src + i,1);//保存一字节进缓冲区 } } strcpy(src,bstr); return src; } /** * @brief 排序OK 从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @returns 返回值 不OK null */ char* duSortDesc(char* src,char* newchar,int lenght) { char bstr[strlen(src)];//转换缓冲区 需要考虑,否则重复用,会出现问题 memset(bstr,0,sizeof(bstr)); int lentf=strlen(src); //printf("%d\n",lentf); //char* newstr[lenght]; int digits[10] = {0}; // 存储数字出现的次数 for (int i = 0; src[i] != '\0'; i++) { if (isdigit(src[i])) { digits[src[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digits[i]; j++) { char digitChar = i + '0'; //*(newchar+j)=digitChar; //*(newchar+i)=digitChar; //printf("%c",digitChar); //newchar[j]=digitChar; strncat(newchar, &digitChar, 1); //strncat(newstr, &digitChar, 1); } } return newchar; //newstr 返回这个值有点不准确 } /** * @brief 排序OK 从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @returns 返回值 OK */ char* duSortDesc2(char* src,char* newchar[],int lenght) { char bstr[strlen(src)];//转换缓冲区 需要考虑,否则重复用,会出现问题 memset(bstr,0,sizeof(bstr)); int lentf=strlen(src); //const lstr=lenght; //printf("%d\n",lentf); //char* newstr[lentf]; int digits[10] = {0}; // 存储数字出现的次数 for (int i = 0; src[i] != '\0'; i++) { if (isdigit(src[i])) { digits[src[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digits[i]; j++) { char digitChar = i + '0'; //*(newchar+j)=digitChar; //*(newchar+i)=digitChar; //printf("%c",digitChar); //newchar[j]=digitChar; strncat(newchar, &digitChar, 1); //strncat(newstr, &digitChar, 1); } } return newchar; } /** * @brief * @param dst * @param str * @param spl * 示例 * char str[] = "what is your name?"; * char dst[10][80]; * int cnt = split(dst, str, " "); * for (int i = 0; i < cnt; i++) * puts(dst[i]); * */ int strSplit(char dst[][80], char* str, const char* spl) { int n = 0; char *result = NULL; result = strtok(str, spl); while( result != NULL ) { strcpy(dst[n++], result); result = strtok(NULL, spl); } return n; } /** * @brief 排序从小到大 * @param src 原字符串数组 * @param newint 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ int* duIntCmpSortAsc(int* src,int* newint[],int lenght) { int bstr[sizeof(src)/sizeof(src[0])];//转换缓冲区 需要考虑,否则重复用,会出现问题 memset(bstr,0,sizeof(bstr)); int lentf=strlen(src); int* newstr[lentf]; qsort(src,strlen(src),sizeof(src[0]),IntCmpAsc); for(int i=0;i<lenght;i++) { printf("%d ",src[i]); strncat(newint,src[i], 1); strncat(newstr, src[i], 1); } return newint; } /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newint 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ int* duIntCmpSortDesc(int* src,int* newint[],int lenght) { int bstr[sizeof(src)/sizeof(src[0])];//转换缓冲区 需要考虑,否则重复用,会出现问题 memset(bstr,0,sizeof(bstr)); int lentf=strlen(src); int* newstr[lentf]; qsort(src,strlen(src),sizeof(src[0]),IntCmpDesc); for(int i=0;i<lenght;i++) { printf("%d ",src[i]); strncat(newint,src[i], 1); strncat(newstr, src[i], 1); } return newint; } /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ char* duStrCmpSortAsc(char* src,char* newchar[],int lenght) { char bstr[strlen(src)];//转换缓冲区 需要考虑,否则重复用,会出现问题 memset(bstr,0,sizeof(bstr)); int lentf=strlen(src); char* newstr[lentf]; qsort(src,strlen(src),sizeof(src[0]),strCmpAsc); for(int i=0;i<lenght;i++) { printf("%c ",src[i]); strncat(newchar,src[i], 1); strncat(newstr, src[i], 1); } return newchar; } /** * @brief 排序从大到小 * @param src 原字符串数组 * @param newchar 排序后的字符串数组 * @param lenght 字符串数组长度 * @return * */ char* duStrCmpSortDesc(char* src,char* newchar[],int lenght) { //char bstr[strlen(src)];//转换缓冲区 需要考虑,否则重复用,会出现问题 //memset(bstr,0,sizeof(bstr)); const int lentf=strlen(src); printf("原始字符串:%s \n",src); //int firstn=sizeof(src[0]); char* newstr[lenght]; qsort(src,strlen(src),sizeof(src[0]),strCmpDsc); for(int i=0;i<strlen(src);i++) { //printf("%c ",src[i]); //strncat(newchar,src[i], 1); if (isdigit(src[i])){ char va=src[i] ; printf("%c ",va); strncat(newstr, &va, 1); strncat(newchar, &va,1); } else { char va=src[i]; strncat(newstr, &va, 1); strncat(newchar, &va,1); } //newchar[i]=src[i]; //newstr[i]=src[i]; } return newchar; }
printf("hello c world \n"); printf("你好,中国\n"); //char a[10]="1092367145"; //变量名重复赋值,这个编译出问题 char bbdu[10]="1092367145"; /* char* c[10]={'\0'}; qsort(a,strlen(a),sizeof(a[0]),cmp); for(int i=0;i<=10;i++) { char du=a[i]; printf("%c ",du); strncat(c, &du, 1); //c[i]=du; } printf("\nc=:%s length=:%d\n",c,strlen(c)); */ char* charqs[10]={'\0'};//NULL; // char* reqs; printf("\n 原串: %s",bbdu); reqs=duStrCmpSortDesc(bbdu,charqs,10); printf("\nchar:%s lenght=:%d\n",charqs,strlen(charqs)); printf("\nchar:%s\n",reqs); //分割字符串 https://githubmota.github.io/2017/12/29/2017-12-29-Linux-C-Split/ //如何找到数字字符串的首位数和末位数索引 char ssss[] = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; char delim[] = " ,!"; char *token; for(token = strtok(ssss, delim); token != NULL; token = strtok(NULL, delim)) { printf(token); printf("\n\f"); } printf("\n"); char *dustr = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; //这个不可以用替换函数,需要索引长度大于自身的宽度 char *substr = "109236714533"; char *substr2 = "654123"; char geovindu[100] = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; //必须索引值大,否则不可以替换 char *newdig[10]; char *digg; char *sdu; char *newdig2[6]; char newstrd[10]={0};//初始化赋值 char *ddu[10]={'\0'};; //初始化赋值 int digitsdu[10] = {0}; // 存储数字出现的次数 for (int i = 0; substr[i] != '\0'; i++) { if (isdigit(substr[i])) { digitsdu[substr[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digitsdu[i]; j++) { char digitChar = i + '0'; strncat(newstrd, &digitChar, 1); //printf("%c",digitChar); strncat(ddu, &digitChar, 1); } } char newstrd2[6]={0}; //初始化赋值 char *ddu2[6]={'\0'};//初始化赋值 int digitsdu2[10] = {0}; // 存储数字出现的次数 for (int i = 0; substr2[i] != '\0'; i++) { if (isdigit(substr2[i])) { digitsdu2[substr2[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digitsdu2[i]; j++) { char digitChar = i + '0'; strncat(newstrd2, &digitChar, 1); //*(newchar+j)=digitChar; //*(newchar+i)=digitChar; //printf("%c",digitChar); //ddu2[i]=digitChar; strncat(ddu2, &digitChar, 1); } } printf("\n1: %s\n",newstrd); printf("2: %s\n",ddu); printf("3: %s\n",newstrd2); printf("4: %s\n",ddu2); char *newddd=newstrd; char *fff; char *kk; char dustr11[10] = "1092367145"; char dustr22[6] = "654123"; digg=duStrCmpSortDesc(dustr11,newdig,10); kk=duStrCmpSortDesc(dustr22,newdig2,6); char* Olddustr11 = "1092367145"; char* Olddustr22 = "654123"; fff=duReplace(geovindu,Olddustr11,ddu); //ddu printf("fff1:%s\n",fff); fff=duReplace(geovindu,Olddustr22,ddu2); printf("fff2:%s\n",fff); printf("\nnew:%s\n",digg); printf("newdig:%s\n",newdig); printf("newdig2:%s\n",newdig2); printf("kk:%s\n",kk); printf("fff3:%s\n",fff); //查找索引 char *dus =strstr(dustr,substr); // char *dus2=strstr(dustr,substr2);// if(dus==NULL) printf("can't find %s in %s\n",substr,dustr); else printf("%s include %s;show the string from start found address:%s\n", dustr,substr,dus); //起始索引 int index=dus - dustr; int index2=dus2-dustr; //结束索引 int endindex=index+strlen(substr); int endindex2=index2+strlen(substr2); printf("1092367145 start index:%d,end:%d.\n",index,endindex); printf("654123 start index:%d,end:%d.\n",index2,endindex2); char ch[100] = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; char duresult[100]; // 存储处理后的结果 char gx[]="GXZX"; char *dup; char *gxdup; char newstr[100]; char *des; dup=fff; //fff char gxz[]="高训中心"; //strcat(newstr, "高训中心"); strncat(newstr,&gxz,8); //printf("%s/n",gxdup); int gxlen=strlen("高训中心"); //*(dup+14)='d'; int l=sizeof(ch)/sizeof(ch[0]); //倒序显示 //for(int i=l;i>=0;i--) //{ // printf("%c\n",dup[i]); // // } //顺序显示 for(int i=4;i<l;i++) { if(dup[i]>='A' && dup[i]<='Z') { printf("%c\n",dup[i]); char sd=dup[i]; strncat(newstr,&sd,1); } else if(dup[i]>='a' && dup[i]<='z') { printf("%c\n",toupper(dup[i])); *(dup+i)=toupper(dup[i]); char sx=toupper(dup[i]); strncat(newstr,&sx,1); } else if(isdigit(dup[i])) { printf("數字:%c\n",dup[i]); char sszi=dup[i]; strncat(newstr,&sszi,1); } else { //des=newstr; //des=dup[i]; //strcat(des[1],dup[i]); //strcpy(des, dup[i]); //memset(des, '\0', sizeof(des)); //strcat(&des,&dup[i]); //*(des+i) = '*'; //*(des+i+1)=dup[i]; //printf("%c\n",dup[i]); strncat(newstr, &ch[i], 1); strncat(newstr, &ch[i], 1); } // } gxdup=duReplace(ch,"GXZX","高训中心"); printf("gx=%s\n",gxdup); printf("newstr= %s\n",newstr); // (1) 将GXZX前四个字符串中的大写字母转换成“高训中心” for (int i = 0; i < 4; i++) { if (isupper(ch[i])) { strcat(duresult, "高训中心"); } else { // (2) 将字符串中其余的小写字母转换成大写字母 char uppercaseChar = toupper(ch[i]); strncat(duresult, &uppercaseChar, 1); } } // (3) 数字降序排序 int digits[10] = {0}; // 存储数字出现的次数 for (int i = 0; ch[i] != '\0'; i++) { if (isdigit(ch[i])) { digits[ch[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digits[i]; j++) { char digitChar = i + '0'; strncat(duresult, &digitChar, 1); } } // (4) 特殊符号加倍输出 for (int i = 4; ch[i] != '\0'; i++) { if (!isalpha(ch[i]) && !isdigit(ch[i])) { strncat(duresult, &ch[i], 1); strncat(duresult, &ch[i], 1); } } printf("处理后的字符串:%s\n", duresult);
printf("hello world, c \n"); printf("你好,中国\n"); char ch[100] = {"GXZXLeaag^*** 1092367145 &*@654123HUYqianrushi" }; int lennum=sizeof(ch)/sizeof(ch[0]); char *des[4];//={0}; char *gx[0]={{"高训中心"}}; int slen=strlen(ch); char *rdes[slen-4]; printf("%s\n",strRight(rdes,ch,slen-4)); printf("%s\n",strLeft(des,ch,4)); printf(des); if(des=="GXZX") { printf("%s",gx[0]); }
printf("hello world, c \n"); printf("你好,中国\n"); char ch[100] = {"GXZXLeaag^*** 1092367145 &*@654123HUYqianrushi" }; int lennum=sizeof(ch)/sizeof(ch[0]); char *des[8];//={0}; char *gx[0]={{"高训中心"}}; char *newch[100]; printf("%s\n",duReplace(ch,"GXZX","高训中心")); int slen=strlen(ch); char *rdes[slen-8]; printf("%s\n",strRight(rdes,ch,slen-8)); printf("%s\n",strLeft(des,ch,8)); printf(des); if(des=="GXZX") { printf("%s",gx[0]); }
printf("hello world, c \n"); printf("你好,中国\n"); char ch[] = {"GXZXLeaag^*** 1092367145 &*@654123HUYqianrushi" }; char *dup; char newstr[50]; char *des; dup=ch; *(dup+14)='d'; int l=sizeof(ch)/sizeof(ch[0]); //倒序显示 //for(int i=l;i>=0;i--) //{ // printf("%c\n",dup[i]); // // } //顺序显示 for(int i=0;i<l;i++) { if(dup[i]>='A' && dup[i]<='Z') { printf("%c\n",dup[i]); } else if(dup[i]>='a' && dup[i]<='z') { printf("%c\n",toupper(dup[i])); *(dup+i)=toupper(dup[i]); } else if(isdigit(dup[i])) { printf("數字:%c\n",dup[i]); } else { des=newstr; //des=dup[i]; //strcat(des[1],dup[i]); //strcpy(des, dup[i]); //memset(des, '\0', sizeof(des)); //strcat(&des,&dup[i]); *(des+i) = '*'; *(des+i+1)=dup[i]; printf("%c\n",dup[i]); } // } printf("%s\n",dup); //printf("%s",dup); //*(p+10)="G"; char str1[14] = "涂聚文"; char str2[14] = "google"; char str3[14]; int len ; /* 复制 str1 到 str3 */ strcpy(str3, str1); printf("strcpy( str3, str1) : %s\n", str3 ); /* 连接 str1 和 str2 */ strcat( str1, str2); printf("strcat( str1, str2): %s\n", str1 ); /* 连接后,str1 的总长度 */ len = strlen(str1); printf("strlen(str1) : %d\n", len );
printf("hello world, c \n"); printf("你好,中国\n"); char *dustr = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; //这个不可以用替换函数,需要索引长度大于自身的宽试 char *substr = "1092367145"; char *substr2 = "654123"; char geovindu[100] = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; //必须索引值大,否则不可以替换 char *newdig[10]; char *digg; char *sdu; char *newdig2[6]; char newstrd[10]; char *ddu[10]; int digitsdu[10] = {0}; // 存储数字出现的次数 for (int i = 0; substr[i] != '\0'; i++) { if (isdigit(substr[i])) { digitsdu[substr[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digitsdu[i]; j++) { char digitChar = i + '0'; strncat(newstrd, &digitChar, 1); printf("%c",digitChar); strncat(ddu, &digitChar, 1); } } char newstrd2[10]; char *ddu2[10]; int digitsdu2[10] = {0}; // 存储数字出现的次数 for (int i = 0; substr2[i] != '\0'; i++) { if (isdigit(substr2[i])) { digitsdu2[substr2[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digitsdu2[i]; j++) { char digitChar = i + '0'; strncat(newstrd2, &digitChar, 1); //*(newchar+j)=digitChar; //*(newchar+i)=digitChar; printf("%c",digitChar); //ddu2[i]=digitChar; strncat(ddu2, &digitChar, 1); } } printf("\n1: %s\n",newstrd); printf("2: %s\n",ddu); printf("3: %s\n",newstrd2); printf("4: %s\n",ddu2); char *newddd=newstrd; char *fff; char *kk; digg=duSortAsc(substr,newdig,10); kk=duSortAsc2(substr2,newdig2,6); fff=duReplace(geovindu,substr,ddu); printf("fff:%s\n",fff); fff=duReplace(fff,substr2,kk); printf("\nnew:%s\n",digg); printf("newdig:%s\n",newdig); printf("newdig2:%s\n",newdig2); printf("kk:%s\n",kk); printf("fff:%s\n",fff); //查找索引 char *dus =strstr(dustr,substr); // char *dus2=strstr(dustr,substr2);// if(dus==NULL) printf("can't find %s in %s\n",substr,dustr); else printf("%s include %s;show the string from start found address:%s\n", dustr,substr,dus); //起始索引 int index=dus - dustr; int index2=dus2-dustr; //结束索引 int endindex=index+strlen(substr); int endindex2=index2+strlen(substr2); printf("1092367145 start index:%d,end:%d.\n",index,endindex); printf("654123 start index:%d,end:%d.\n",index2,endindex2); char ch[100] = "GXZXLeaag%^*** 1092367145 &*@654123HUYqianrushi"; char duresult[100]; // 存储处理后的结果 char gx[]="GXZX"; char *dup; char *gxdup; char newstr[100]; char *des; dup=fff; char gxz[]="高训中心"; //strcat(newstr, "高训中心"); strncat(newstr,&gxz,8); //printf("%s/n",gxdup); int gxlen=strlen("高训中心"); //*(dup+14)='d'; int l=sizeof(ch)/sizeof(ch[0]); //倒序显示 //for(int i=l;i>=0;i--) //{ // printf("%c\n",dup[i]); // // } //顺序显示 for(int i=4;i<l;i++) { if(dup[i]>='A' && dup[i]<='Z') { printf("%c\n",dup[i]); char sd=dup[i]; strncat(newstr,&sd,1); } else if(dup[i]>='a' && dup[i]<='z') { printf("%c\n",toupper(dup[i])); *(dup+i)=toupper(dup[i]); char sx=toupper(dup[i]); strncat(newstr,&sx,1); } else if(isdigit(dup[i])) { printf("數字:%c\n",dup[i]); char sszi=dup[i]; strncat(newstr,&sszi,1); } else { //des=newstr; //des=dup[i]; //strcat(des[1],dup[i]); //strcpy(des, dup[i]); //memset(des, '\0', sizeof(des)); //strcat(&des,&dup[i]); //*(des+i) = '*'; //*(des+i+1)=dup[i]; //printf("%c\n",dup[i]); strncat(newstr, &ch[i], 1); strncat(newstr, &ch[i], 1); } // } gxdup=duReplace(ch,"GXZX","高训中心"); printf("gx=%s\n",gxdup); printf("newstr= %s\n",newstr); // (1) 将GXZX前四个字符串中的大写字母转换成“高训中心” for (int i = 0; i < 4; i++) { if (isupper(ch[i])) { strcat(duresult, "高训中心"); } else { // (2) 将字符串中其余的小写字母转换成大写字母 char uppercaseChar = toupper(ch[i]); strncat(duresult, &uppercaseChar, 1); } } // (3) 数字降序排序 int digits[10] = {0}; // 存储数字出现的次数 for (int i = 0; ch[i] != '\0'; i++) { if (isdigit(ch[i])) { digits[ch[i] - '0']++; } } for (int i = 9; i >= 0; i--) { for (int j = 0; j < digits[i]; j++) { char digitChar = i + '0'; strncat(duresult, &digitChar, 1); } } // (4) 特殊符号加倍输出 for (int i = 4; ch[i] != '\0'; i++) { if (!isalpha(ch[i]) && !isdigit(ch[i])) { strncat(duresult, &ch[i], 1); strncat(duresult, &ch[i], 1); } } printf("处理后的字符串:%s\n", duresult);
//分割字符串 https://githubmota.github.io/2017/12/29/2017-12-29-Linux-C-Split/ char ssss[] = "hello, world! welcome to china!"; char delim[] = " ,!"; char *token; for(token = strtok(ssss, delim); token != NULL; token = strtok(NULL, delim)) { printf(token); printf("+"); } printf("\n");
https://github.com/huawenyu/Design-Patterns-in-C
https://swedishembedded.com/design-patterns/
https://blog.csdn.net/ZCShouCSDN/article/details/80217199
https://www.sciencedirect.com/book/9781856177078/design-patterns-for-embedded-systems-in-c
https://www.oreilly.com/library/view/design-patterns-for/9781856177078/
https://github.com/topics/design-patterns?l=c
安装插件“Doxygen Documentation Generator”,用来生成注释。
安装插件”C/C++ Snippets”,用来生成文件头、代码块分割线等。或 KoroFileHeader
C/C++ Snippets插件设置
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)