一 C 语言字符处理函数库 ctype.h

字符处理函数库(Character-handling library),包含几个用于字符数据测试和操作的函数。每个函数接受的实参都是一个用整型数或EOF表示的字符。在 C 语言中 字符通常被当作整型数来处理,因为C语言中的字符通常是一个字节的整数。一般而言, EOF的值为 -1,但是某些硬件体系结构不允许在char类型变量中存储负值,所以,字符处理函数把这种字符当作整型数来处理。

字符处理函数
函数原型 描述
int   isdight(int c) 如果C是数字,函数返回真,否则,返回假(0)
int   isalpha(int c) 如果C是字母,函数返回真,否则,返回假(0)
int   isalnum(int c) 如果C是数字或字母,函数返回真,否则,返回假(0)
int   isxdigit(int c) 如果C是一个十六进制的数字字符,函数返回真,否则,返回假(0)
int   islower(int c) 如果C是小写字母,函数返回真,否则,返回假(0)
int   isupper(int c) 如果C是大写字母,函数返回真,否则,返回假(0)
int   tolower(int c) 如果C是大写字母,函数将 C 转换为小写字母后返回,否则,返回未改变实参 C 的值
int   toupper(int c) 如果C是小写字母,函数将 C 转换为大写字母后返回,否则,返回未改变实参 C 的值
int   isspace(int c) 如果c 是空白字符(  '\n' ; ' ' ; '\f' ; '\r' ; '\t' ; '\v' ),则函数返回为真,否则,返回假(0)
int   iscntrl(int c) 如果 c 是一个控制符,则函数返回为真,否则,返回假(0)
int   ispunct(int c) 如果 c 是一个除空格,数字,字母以外的所有可打印字符,则函数返回为真,否则,返回假(0)
int   isprint(int c) 如果 c 是一个包含空格在内的可打印字符,则函数返回为真,否则,返回假(0)
int   isgraph(int c) 如果 c 是一个除空格以外的所有可打印字符,则函数返回为真,否则,返回假(0)

示例:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h> //字符函数头文件void main()
{char n = '10';//int n = '8';int flag = isdigit(n);//isdigit 判断字符是否是数字printf("根据 isdigit 函数判断是否是数字\n ");if (flag){printf("n='10'-> n是数字\n");}else{printf("n='10'-> n是不数字\n");}printf("\n----------------------\n");char c1 = 'B';printf("根据 isalpha 函数判断是否是字母\n ");char* str1 = { isalpha(c1) ? "c1='B' c1是字母" : "c1='B' c1不是字母" };printf("%s \n", str1);printf("\n----------------------\n");printf("%s\n%s%s\n%s%s\n%s%s\n%s%s\n","According to isalnum:",isalnum('A') ? "A is a" : "A is not a", "letter",isalnum('b') ? "b is a" : "b is not a", "letter",isalnum('#') ? "# is a" : "# is not a", "letter",isalnum('4') ? "4 is a" : "4 is not a", "letter");printf("\n----------------------\n");printf("%s\n%s%s\n%s%s\n%s%s\n%s%s\n","根据 isxdigit 函数判断是否是十六进制字符:",isxdigit('A') ? "A 是一个" : "A 不是一个", "十六进制字符",isxdigit('K') ? "K 是一个" : "K 不是一个", "十六进制字符",isxdigit('E') ? "E 是一个" : "E 不是一个", "十六进制字符",isxdigit('G') ? "G 是一个" : "G 不是一个", "十六进制字符");printf("\n----------------------\n");printf("%s\n%s%s\n%s%s\n","根据 islower 函数判断字符是否是小写字符:",islower('A') ? "A 是一个" : "A 不是一个", "小写字符",islower('a') ? "a 是一个" : "a 不是一个", "小写字符");printf("\n----------------------\n");printf("%s\n%s%s\n%s%s\n","根据 isupper 函数判断字符是否是大写字符:",isupper('A') ? "A 是一个" : "A 不是一个", "大写字符",isupper('a') ? "a 是一个" : "a 不是一个", "大写字符");printf("\n----------------------\n");system("pause");
}

二 通用函数库中字符串转换函数 stdlib.h:

这些函数将数字字符串转换为整数或浮点型数值。注意:使用限定符 const 声明函数头中的变量 nPtr (从右向左读,nPtr 是一个指针,指向一个字符常量),const 规定这个实参的值不能被修改。

字符串转换函数
函数原型 函数描述
double  atof(const  char *nPtr) 将 nPtr 指向的字符串转换为双精度浮点数
int  atoi(const  char *nPtr) 将 nPtr 指向的字符串转换为整型数
long atol(const  char *nPtr) 将 nPtr 指向的字符串转换为长整型数
double  strtod(const  char *nPtr, char **endPtr) 将 nPtr 指向的字符串转换为双精度浮点数
long strtol(const  char *nPtr, char **endPtr, int  base) 将 nPtr 指向的字符串转换为长整型数
unsigned long strtoul(const  char *nPtr, char **endPtr, int  base) 将 nPtr 指向的字符串转换为无符号长整型数

示例:

#include<stdio.h>
#include<stdlib.h>void main()
{double d1 = atof("12.3345");printf("%s %.4f\n", "字符串:‘12.3345’, 转换为双精度浮点类型为:", d1);printf("\n --------------------- \n");int n1 = atoi("100");printf("%s %d\n", "字符串:‘100’, 转换为整数类型为:", n1);printf("\n --------------------- \n");long l1 = atol("1000000000");printf("%s %d\n%s %d\n", "字符串:‘1000000000’, 转换为长整数类型为:", l1,"它的2分之一为:",l1/2);printf("\n --------------------- \n");const char* str1 = "52.12% abc";double d2;char* strPtr1;d2 = strtod(str1, &strPtr1);printf("转换为:%.zf \n剩余字符串为:%s\n", d2, strPtr1);printf("\n --------------------- \n");const char* str2 = "-12399334abc";char* strPtr2;long l2;l2 = strtol(str2, &strPtr2, 0);//参数1 字符串,参数2 剩余字符串,参数3 转换后数值可以表示的进制形式(8进制,基数为8;10进制 基数为10 ;16进制 基数为16)这个基数可以指定 0 或2 - 36 之间的任意数printf("转换为:%ld \n剩余字符串为:%s\n", l2, strPtr2);printf("再加上 %d 后的结构是:%ld \n", 550, l2 + 550);printf("\n --------------------- \n");const char* str3 = "123456789NNN";char* strPtr3;long l3;l3 = strtol(str3, &strPtr3, 0);printf("转换为:%lu \n剩余字符串为:%s\n", l3, strPtr3);printf("再减去 %d 后的结构是:%lu \n", 550, l3 + 550);printf("\n --------------------- \n");system("pause");
}

三 字符串处理函数库 string.h

字符串复制和连接函数:

函数原型 函数描述
char * strcpy ( char *s1 , const char * s2) 将字符串s2 复制到s1 中,函数返回s1的值
char * strncpy ( char *s1 , const char * s2, size_t  n) 把 s2指向的字符串的 n 个 字符,拷贝到 s1 指向的位置,函数返回 s1
char * strcat ( char *s1 , const char * s2) 把 s2 指向的字符串拷贝到 s1指向字符串的后面,s2 字符串的第一个字符位置覆盖 s1字符串的空字符位置,函数返回 s1
char * strncat ( char *s1 , const char * s2, size_t  n) 把 s2 指向的字符串的 n 个字符拷贝到 s1指向字符串的后面(或拷贝到s2的空字符为止),s2 字符串的第一个字符位置覆盖 s1字符串的空字符位置,函数返回 s1

示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>/*获取字符串个数
*/
int countString(char* str)
{int n = 0;while (*str!='\0'){n++;str++;}return n;
}int main()
{printf("******************** 字符串拷贝函数示例 ********************\n\n");char* str = "Happy Birthday to you";char str1[50] = {0};char str2[50] = {0};printf("%s%s\n%s%s\n", "原字符串str:", str, "拷贝后str1:", strcpy(str1, str));int num = countString(str);strncpy(str2, str, num - 7);//如果字符数组没有初始化为0 ,保险期间应加上 :str2[num-7]='\0' ,添加字符串结束标记printf("%s%s\n", "拷贝后str2:", str2);printf("******************** 字符串拷贝函数示例 ********************\n\n");printf("******************** 字符串连接函数示例 ********************\n\n");char s1[20] = "Happy ";char s2[] = "New Year";char s3[50] = { 0 };printf("s1=%s\ns2=%s\ns3=%s\n", s1, s2, s3);printf("strcat(s1,s2)=%s\n", strcat(s1, s2));printf("strcat(s3,s1,6)=%s\n", strncat(s3, s1,6));printf("strcat(s3,s1)=%s\n", strcat(s3, s1));printf("******************** 字符串连接函数示例 ********************\n\n");system("pause");
}

字符串比较函数:

函数原型 函数描述
int  strcmp( const  char *s1 , const  char *s2) 比较字符串s1和 s2,当 s1 等于,小于,大于s2时,函数分别返回  0,1,-1
int  strncmp( const  char *s1 , const  char *s2, size_t  n) 比较字符串s1和s2的n个字符,当 s1 等于,小于,大于s2时,函数分别返回  0,1,-1

示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>/*自定义字符串比较函数 ,返回 int 类型 0 相等 ,!0 不等
*/
int myStrcmp(char *p1, char *p2)
{int i = 0; //下标,从第一个字符开始比较//如果相当且没有结束,就一直向前比较while (p1[i]==p2[i]&&p1[i]!='\0'){i++;//下标向前移动}int num;if (p1[i] == '\0'&&p2[i] == '\0'){num = 0;}else{num = p1[i] - p2[i]; //将差值赋值num}return num;
}void main()
{//strncmp :比较字符串前 n 个字符是否相等 ,其他与strcmp相同char chA[30] = "notepadAAA";char chB[30] = "notepadSS";if (strncmp(chA, chB, 7) == 0){printf("%s 和 %s 的前 %d 个字符比较结果是:相等\n", chA, chB,7);}else{printf("%s 和 %s 的前 %d 个字符比较结构是:不等\n", chA, chB, 7);}//strcmp函数: 返回int类型 相当 =0 大于 =1 小于 =-1  一般用于验证密码char ch1[20] = "Strcmp";char ch2[20]= "strcmp";// int num = strcmp(ch1,ch2);_strupr(ch1); //转大写_strupr(ch2);int num = myStrcmp(ch1, ch2);if (num == 0) {printf("%s 和 %s 的比较结果是:相等\n",ch1,ch2);}else{printf("%s 和 %s 的比较结果是:不等\n", ch1, ch2);}system("pause");
}

字符串查找函数:

函数原型 函数描述
char *strchr ( const char *s , int c) 在 S 所指向的对象中,确定字符C第一次出现的位置。若找到C,函数返回 S 中 C 的指针,否则返回NULL
size_t  strcspn( const char *s1, const char *s2  ) 确定并返回字符串s1中不包含(未出现)在字符串s2中任何字符的(最大)起始(字符串片段的)长度
size_t  strspn( const char *s1, const char *s2  ) 确定并返回字符串s1中只包含字符串s2中字符的起始字符串片段的长度
char *  strbrk( const char *s1, const char *s2  ) 在字符串s1中,确定字符串s2中字符第一次出现的位置。若找到字符串s2中的字符,函数则返回指向s1中该字符的指针。否则返回NULL指针
char *strrchr ( const char *s , int c) 在 S 所指向的对象中,确定字符C 最后一次出现的位置。若找到了C 函数返回S 中 C 的指针,否则返回NULL 指针
char *  strstr( const char *s1, const char *s2  ) 在字符串 s2 中,确定字符串s1 第一次出现的位置。若找到了字符串,函数返回s1中的指针,否则返回NULL指针
char *  strtok( const char *s1, const char *s2  ) 连续调用 strtok 函数将字符串s1 分解成若干“标号” (Token)。------   一行文本中的逻辑片段,例如单词。这些逻辑片段是被字符串s2中的字符所分割的。第一次调用 strtok 函数需要包含 s1作为第一个实参。如果后续的 strtok 函数调用任然对同一个字符串标号化,则必须以 NULL 作为第一个实参。每次函数调用都指向当前标号的指针,当函数不在产生新的 标号时,返回NULL

示例1:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>void show1(char* p, int len);
int indexes(char* p1, char* p2);int main(void)
{const char* str = "I Love My Motherland China";char ch1 = 'M';char* pch1 = NULL;printf("------------字符查找函数 strchr -----------------\n\n");pch1 = strchr(str, ch1);if (pch1 == NULL){printf("%c ,没有在字符串“ %s ” 中出现\n",ch1,str);}else{printf("[%c] ,在字符串“ %s ” 中出现\n", ch1, str);printf("[%c] ,的指针地址是:%p, 存储的字符是:%c\n", ch1, pch1,*pch1);}printf("\n------------------------------------------------\n\n");///printf("------------字符查找函数 strcspn -----------------\n\n");const char* str1 = "The value is 3.1415926 and so on ...... ......";char* pstring1 = "1234567890";unsigned int length1 = strcspn(str1, pstring1);//返回的只能是从字符串起始位置开始printf("字符串“ %s ” 中 没有包含字符串 “ %s ” 的最大片段长度是:%d\n",str1, pstring1,length1);printf("字符串:");show1(str1, length1);printf("长度是:%u",length1);printf("\n------------------------------------------------\n\n");//printf("------------字符查找函数 strpbrk -----------------\n\n");const char* str2 = "This is a Test";const char* str3 = "apple";char* pch2 = strpbrk(str2, str3);printf("字符串 [%s] ,中的字符 在字符串 [%s] 中第一个匹配的是:%c \n", str3, str2, *pch2);int n = indexes(str2, pch2);if (n > 0){printf("字符 【%c】在 【%s】中的位置是:%d \n",*pch2,str2, n);}printf("\n------------------------------------------------\n\n");///printf("------------字符查找函数 strrchr -----------------\n\n");char ch2 = 'n';char* pch3 = strrchr(str, ch2);if (pch3 != NULL){printf("字符【%c】在字符串【%s】最后出现的位置是【%s】", ch2,str, pch3);}printf("\n------------------------------------------------\n\n");//return 0;system("pause");
}//输出字符串从开始到指定长度
void show1(const char* p, int len)
{if (len == 0||p==NULL){return;}int n = 0;while (n<len){printf("[%c] ", *p);p++;n++;}}//求字符 在字符串中的索引位置
int indexes(char* p1, char* p2)
{int n = -1;if (p1 == NULL || p2 == NULL){return n;}while (*p1!='\0'){n++;if (*p1 == *p2){return n;}p1++;}return n;
}

示例2:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main(void)
{printf("------------字符查找函数 strchr -----------------\n\n");const char* str1 = "The value is 3.1415926,3.1415927";char* pstring1 = " ehT iseluav";unsigned int n = strspn(str1, pstring1);printf("str1 中包含 pstring1 的最大字符串片段长度是: %d \n", n);printf("\n------------------------------------------------\n\n");///printf("------------字符查找函数 strstr -----------------\n\n");char* str2 = "3.14";char* pstring2 = strstr(str1, str2);if (pstring2 != NULL){printf("%s 在 %s \n 第一次出现的位置是: %s\n",str2, str1, pstring2);}printf("\n------------------------------------------------\n\n");///printf("------------字符串分割函数 strtok -----------------\n\n");char str3[100] = "This is sentence with 7 tokens";char* tokenPrt; //声明创建一个指针printf("%s 使用空格分割为以下字符串:\n", str3);tokenPrt = strtok(str3, " ");//使用空格分割  (开始)while(tokenPrt != NULL){printf("%s\n", tokenPrt);tokenPrt = strtok(NULL, " "); //继续使用空格分割字符串 ,继续分割同一个字符串,第一参数为 NULL}printf("\n------------------------------------------------\n\n");system("pause");
}

字符串处理库中内存函数:

字符串内存函数
函数原型 函数描述
void *memcpy(void *s1,const void *s2,size_t n); 将 s2 中的n个字符复制到s1中,返回指向目标对象(s1)的指针,如果两个位置出现重叠,其行为未定义。
void *memmove(void *s1,const void *s2,size_t n); 从s2 中复制n个字符到s1中,其行为与拷贝类似,返回指向目标对象(s1)的指针。但是出现局部重叠情况,该函数会先把重叠的内容拷贝至临时变量。
void *memcmp(void *s1,const void *s2,size_t n); 比较s1所指向前n个字符和s2所指向的前n个字符,每个值解释未 char 类型,如果 n 个字符都匹配,则完全相同,函数返回 0 ,如果s1 小于 s2 函数返回值 <0 , 反之 >0
void *memchr(const void *s, int c ,size_t n); 在 s 所指向的前 n 个字符中,确定 c 第一次出现的位置。若找到 c 返回指向 c 的指针,否则返回NULL
void *memset void *s, int c ,size_t n); 将 C (无符号 char)复制到 s 所指向前 n 个字符中,返回指向目标对象(s)的指针

示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main(void)
{char s1[30] = { 0 };char s2[30] = "Copy this string";unsigned int len1 = sizeof("Copy this string");printf("s1=%s ;s2=%s\n", s1, s2);printf("拷贝后 s1=%s\n", (char *)memcpy(s1, s2,len1));//如果 s1 没有初始化为0 长度=len1+1(包含结束标志)printf("\n------------------------------------------------\n\n");char s3[] = "Home Sweet Home";char s4[] = "I Love My Motherland China";printf("复制之前:%s\n", s3);printf("复制之后:%s\n", (char*) memmove(s3, &s3[5], 10));//复制到s3 从开始位置起,到指定长度结束,覆盖原有的字符printf("复制之前:%s\n", s4);printf("复制之后:%s\n", (char*) memmove(s4, &s3[5], 10));//复制到s4 从开始位置起,到指定长度结束,覆盖原有的字符printf("\n------------------------------------------------\n\n");char str1[] = "ABCDEFG";char str2[] = "ABCDXYZ";printf("比较两个字符串的前 n 个字符:\n str1=%s\nstr2=%s\n", str1, str2);printf("memcmp(str1,str2,4)=%2d\nmemcmp(str1,str2,7)=%2d\nmemcmp(str2,str1,7)=%2d\n", memcmp(str1, str2, 4), memcmp(str1, str2, 7),memcmp(str2, str1, 7));//字符排序越靠后,越大printf("\n------------------------------------------------\n\n");char str3[] = "This is a string";char ch = 's';unsigned int count = sizeof("This is a string");char* p =(char *) memchr(str3, ch, count);if (p != NULL){printf("%c 在 %s 中找到,地址=%p \n", ch, str3,p);}printf("\n------------------------------------------------\n\n");char str[30] = "AAAAAAAAAAAAAAAAAAAA";//这里不能用字符串指针,数组可以改变元素的值,而字符串指针不可以printf("原字符串 str=%s\n", str);printf("复制后 str=%s\n", (char *)memset(str, 'a', 10));system("pause");
}

其他函数:

函数原型 函数描述
char *strerror( int errornum) 将错误号 errornum 以地址方式映射成(信息可能因为地址不同而以不同的语言出现)一个纯文本字符串,返回指向这个字符串的指针
size_t strlen ( const char *s) 获取 字符串 s 的长度,返回字符串 结束符号 NULL(‘ \0 ‘)前面的字符个数。

示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>void main()
{//遍历错误信息for (int i = 0; i < 10; i++){printf("%d : %s\n", i, strerror(i));}printf("\n------------------------------------------------\n\n");char* str1 = "AAAAAAAAAA";char str2[] = "This is a string";char str3[10] = "string";printf("%s\"%s\"%s%u\n%s\"%s\"%s%u\n%s\"%s\"%s%u\n","The lenght of",str1," is ",(unsigned int )strlen(str1),"The lenght of", str2, " is ", (unsigned int)strlen(str2),"The lenght of", str3, " is ", (unsigned int)strlen(str3));system("pause");
}

C语言: 字符串 -2相关推荐

  1. C语言字符串处理的库函数

    使用C语言字符串处理的库函数,务必包含头文件string.h,即#include <string.h>       1. 比较字符串大小函数        1) 忽略大小写---strca ...

  2. c语言作业 字符串替换,C语言字符串替换。解决方法

    当前位置:我的异常网» C语言 » C语言字符串替换.解决方法 C语言字符串替换.解决方法 www.myexceptions.net  网友分享于:2015-04-14  浏览:0次 C语言字符串替换 ...

  3. 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc

    数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...

  4. c语言字符串文库总结,C语言字符串.ppt

    C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...

  5. c语言中的字符串总是以,C语言字符串的结束标志是什么?

    多级反馈队列调度算法详解 通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列.例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或 ...

  6. C语言字符串中最后一个单词的长度的算法(附完整源码)

    C语言字符串中最后一个单词的长度的算法 C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) ...

  7. C语言字符串是否为pallindrome排列的算法(附完整源码)

    C语言字符串是否为pallindrome排列的算法 C语言字符串是否为pallindrome排列的算法完整源码(定义,实现,main函数测试) C语言字符串是否为pallindrome排列的算法完整源 ...

  8. C语言字符串中删除重复的字符的算法(附完整源码)

    C语言字符串中删除重复的字符的算法 C语言字符串中删除重复的字符的算法完整源码(定义,实现,main函数测试) C语言字符串中删除重复的字符的算法完整源码(定义,实现,main函数测试) #inclu ...

  9. C语言字符串转换为整数(附完整源码)

    C语言字符串转换为整数 C语言字符串转换为整数完整源码 C语言字符串转换为整数完整源码 #include <assert.h> #include <stdio.h> #incl ...

  10. C语言字符串相关一级指针内存模型

    C语言字符串相关一级指针内存模型 通过实例探索一级指针内存模型 通过实例探索一级指针内存模型 void main() {char buf[20]= "aaaa";char buf2 ...

最新文章

  1. 能量平衡_500kA 铝电解槽的能量平衡分析
  2. xml解析 只有节点属性 android,and android:解析xml,一个节点标签中,有多个属性,怎样解析?...
  3. Linux如何在系统启动时自动加载模块
  4. IOS开发如何在iTunes中查看沙河下的路径
  5. 美国正面临“人才泡沫”破裂危机?
  6. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
  7. 心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳
  8. 飞畅科技-国内老牌工业以太网交换机品牌
  9. ubuntu opencv多版本控制
  10. mac phpstorm配置svn
  11. 亚马逊SP-API市场端点接口文档整理
  12. 墨修尧哪一章痊愈_墨修尧叶璃
  13. IEEE Fellow、AAAS Fellow 同日公布,清华唐杰、京东郑宇等数十位华人入选
  14. stm32—火焰传感器的初步使用
  15. 初学莫队算法 bzoj2038 小z的袜子 分块算法
  16. 学校计算机教室解说词词,小学各专用教室解说词.doc
  17. Html怎么判断ie5,css怎样判断IE浏览器?
  18. 数据库的备份恢复和SQL语句
  19. 联想Miix 5 Pro二合一笔记本如何装win7系统?
  20. STM32实战总结:HAL之GUI

热门文章

  1. 聊一聊关于微前端架构的几种技术选型
  2. Android如何用release包抓包
  3. 2021年广东省安全员B证(项目负责人)报名考试及广东省安全员B证(项目负责人)模拟考试题库
  4. 木马和病毒有何区别?
  5. STM32CubeMX基础例程(小熊派):04.ADC采集烟雾浓度
  6. 计算机工作表编辑,Excel工作表编辑与管理
  7. Java我的2020年终盘点
  8. 为儿童设计的Android 4.0平板MEEP!
  9. b2b2c源码 java_java B2B2C源码电子商务平台
  10. js二分法排序代码分享