C语言编程能力是否足够应对复杂的长尾词处理需求?

2026-04-10 09:061阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1691个文字,预计阅读时间需要7分钟。

C语言编程能力是否足够应对复杂的长尾词处理需求?

指针 - 指针得到的是指针之间的元素个数,不是字节个数 + strcat 和 strncat + 当自己追加时,strcat 会因首字符是 '\0' 而溢出 + strncat 则可以 + strcat(Den, Sour); + strncat(De, n)

指针-指针得到的是指针之间的元素个数,不是字节个数

字符串追加 strcat 和strncat

C语言编程能力是否足够应对复杂的长尾词处理需求?

自己给自己追加的时候,strcat会崩溃因为首字母是把\0替换掉

strncat就可以

strcat(Den , Sour);

strncat(Den,sour,count);

strstr(Den,Sour)找子串的 如果找到了返回Den字符的地址,找不到返回空指针

字符串---常量字符串,字符串数组 ,如果能成为字符串,则字符串的末尾必定会存放一个\0;

字符串长度--strlen

strlen的返回值是size_t(是无符号整形)


长度不受限制的字符串---strcpy,strcmp,strcat

strcpy注意事项,1. 源地址必须要以'\0'结束,并且拷贝的时候会把'\0'拷贝到目标空间去 2. 目标空间必须足够大,确保源字符串能够存储 3.目标空间必须可变

//该arr1不可变,因为arr1内是常量字符串 char *arr1="abcdef"; //该arr2里可变 char arr2[]="abcdef";

strcat注意事项,1. 目标空间必须足够大,确保源字符串追加在目标字符串处仍能存储 2. 源头和目的地都要包含'\0',而且源头的'\0'会拷贝到目的地中。

strcmp注意事项 1.arr1>arr2返回大于零的数,arr1<arr2返回小于零的数 arr1=arr2返回零,返回类型是int


长度受限制的字符串---strncat,strncpy,strncmp

char* strncpy(const char* str1,const char* str2, size_t count)

strncpy :拷贝num个字符,从源字符到目标空间

如果源字符串的长度小于num,则拷贝完字符串后,在目标的后面追加0直到num个

char* strncat(const char* str1,const char* str2, size_t count)

strncat: 追加n个字符,如果追加的n比arr2要短,追加之后自动补一个‘\0’,如果比arr2要长,则追加arr2之后补一个‘\0’之后就不管了。

int strncmp(const char* str1,const char* str2, size_t count)

strncmp : 比较到一个字符串结束或者出现另个字符不一样或者num个字符全部比较完。


字符串查找---strstr,strtok

strstr :查找字符串 如果没有查找到返回的是空指针,如果查找到了,返回的是查找到的字符串的地址

int main() { char* p1 = "abcdefabcdef"; char* p2 = "de"; char* ret = strstr(p1, p2);//返回的是defabcdef ,返回的是在p1中首次出现的字符串地址,打印p1后面的所有元素 if (ret==NULL) { printf("查不到该字串"); } else { printf("%s\n",ret); } return 0; }

strtok

char* strtok(char* str,const char* sep)

sep参数是个字符串,定义了用作分隔符的字符集合

注意事项:

  1. 第一个参数指定一个字符串,他包含了0个或者多个由sep字符串中1个或者多个分隔符的标记
  2. strtok找到str中的下一个标记,并将其用'\0'结尾,返回一个指向这个标记的指针(strtok会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可以修改)
  3. 若strtok函数第一个参数不为NULL时,函数将找到str中的第一个标记,str函数将保存他在字符串中的位置
  4. 若strtok函数第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始找下一个标记
  5. 如果字符串不存在更多的标记,则返回NULL指针
  6. 第一个参数为NULL的strtok函数会匹配距离它最近的第一个参数不是NULL指针的strtok。

错误信息报告---strerror

char* strerror(int errnum);

strerror:返回错误码对应的信息

int main() { //错误码 错误信息 //0 - No error //1 - Operation not permitted //2 - No such file or directory //... ... //全局的错误变量/错误码的变量 //当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码赋值到errno中 /*char* arr = strerror(errno); printf("%s\n", arr);*/ FILE* pf=fopen("text.txt","r"); if (pf==NULL) { printf("%s\n", strerror(errno)); } else { printf("open file success"); } return 0; }


字符分类函数

字符做操作

int main() { char ch = 'w'; //如果是小写字母返回非零值,如果不是小写字符返回0; int ret = islower(ch); //十进制数字0-9 int ret1 = isdigit(ch); //空白字符“空格” 换页"\f" 换行"\n" 回车"\r" 制表符"\t" 垂直制表符"\v" int ret1 = isspace(ch); //十六进制包括a-f A-F int ret1 = isxdigit(ch); //任何控制字符 int ret1 = iscntrl(ch); //大写字母A-Z int ret1 = isupper(ch); //字母a-z,字母A-Z int ret1 = isalpha(ch); //字母或者数字 a-z,字母A-Z 数字0-9 int ret1 = isalnum(ch); //标点符号,任何不属于数字或者字母的图形字符 int ret1 = ispunct(ch); //任何图形字符 int ret1 = isgraph(ch); //任何可打印字符包括图形字符和空白字符 int ret1 = isprint(ch); int ret1 = printf("%d\n", ret); //字符转换 //tolower--转小写字母 //toupper--转大写字母 //如果是小写不动,大写转化为小写 char ch = tolower('Q'); //printf("%c\n",ch); putchar(ch); return 0; }

strcat strcpy strcmp---操作对象是字符串 ‘\0’

整形数组,浮点型数组,结构体数组就不能用'\0'了;


内存操作函数---memcpy,memmove,memset,memcmp

memcpy -- 内存拷贝:即能拷贝整形,浮点型,结构体,字符串

void* mencpy(void* dest,const void* source,size_t num/*单位是字节*/)

如果使用memcpy拷贝时,两个字符串要是有交集,因为会被覆盖(但是可以成功,vs2013可以胜任这个工作)---c语言标准,memcpy只要处理,不重叠的内存拷贝就可以

memmove -- 处理重叠内存的拷贝

void* men(void* dest,const void* source,size_t num/*单位是字节*/)

memcmp---内存比较,比较结果和strcmp的结果是一样的

void* mencmp(void* dest,const void* source,size_t num/*单位是字节*/) int main() { int arr1[] = { 1,2,3,5,6,7,8,9 }; int arr2[] = { 1,2,3,6,3,1,0,9 }; int ret = memcmp(arr1, arr2, 8);//8的单位是字节---结果是0---如果输入的是16则arr1和arr2的第四个不相同则会返回-1 printf("%d\n", ret); return 0; }

memset---设置一个缓冲区为一个特定的字符

void* memset(void* dest,int c,size_t count)

dest----是目标字符串(那块空间进行设置) c-----设置的字符是什么 count-----要设置多少个字符

注意事项----count的单位是字节

int main() { char arr[10] = ""; int arr1[10] = { 0 }; memset(arr,'*',7); //01 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00... memset(arr1, 1, 10);//这种情况只能改掉前两位,和第三位的前两个字节,而且输出的之是16843009,并不是1 return 0; }



NULL---空指针

NUL/Null---‘\0’;








标签:元素个数

本文共计1691个文字,预计阅读时间需要7分钟。

C语言编程能力是否足够应对复杂的长尾词处理需求?

指针 - 指针得到的是指针之间的元素个数,不是字节个数 + strcat 和 strncat + 当自己追加时,strcat 会因首字符是 '\0' 而溢出 + strncat 则可以 + strcat(Den, Sour); + strncat(De, n)

指针-指针得到的是指针之间的元素个数,不是字节个数

字符串追加 strcat 和strncat

C语言编程能力是否足够应对复杂的长尾词处理需求?

自己给自己追加的时候,strcat会崩溃因为首字母是把\0替换掉

strncat就可以

strcat(Den , Sour);

strncat(Den,sour,count);

strstr(Den,Sour)找子串的 如果找到了返回Den字符的地址,找不到返回空指针

字符串---常量字符串,字符串数组 ,如果能成为字符串,则字符串的末尾必定会存放一个\0;

字符串长度--strlen

strlen的返回值是size_t(是无符号整形)


长度不受限制的字符串---strcpy,strcmp,strcat

strcpy注意事项,1. 源地址必须要以'\0'结束,并且拷贝的时候会把'\0'拷贝到目标空间去 2. 目标空间必须足够大,确保源字符串能够存储 3.目标空间必须可变

//该arr1不可变,因为arr1内是常量字符串 char *arr1="abcdef"; //该arr2里可变 char arr2[]="abcdef";

strcat注意事项,1. 目标空间必须足够大,确保源字符串追加在目标字符串处仍能存储 2. 源头和目的地都要包含'\0',而且源头的'\0'会拷贝到目的地中。

strcmp注意事项 1.arr1>arr2返回大于零的数,arr1<arr2返回小于零的数 arr1=arr2返回零,返回类型是int


长度受限制的字符串---strncat,strncpy,strncmp

char* strncpy(const char* str1,const char* str2, size_t count)

strncpy :拷贝num个字符,从源字符到目标空间

如果源字符串的长度小于num,则拷贝完字符串后,在目标的后面追加0直到num个

char* strncat(const char* str1,const char* str2, size_t count)

strncat: 追加n个字符,如果追加的n比arr2要短,追加之后自动补一个‘\0’,如果比arr2要长,则追加arr2之后补一个‘\0’之后就不管了。

int strncmp(const char* str1,const char* str2, size_t count)

strncmp : 比较到一个字符串结束或者出现另个字符不一样或者num个字符全部比较完。


字符串查找---strstr,strtok

strstr :查找字符串 如果没有查找到返回的是空指针,如果查找到了,返回的是查找到的字符串的地址

int main() { char* p1 = "abcdefabcdef"; char* p2 = "de"; char* ret = strstr(p1, p2);//返回的是defabcdef ,返回的是在p1中首次出现的字符串地址,打印p1后面的所有元素 if (ret==NULL) { printf("查不到该字串"); } else { printf("%s\n",ret); } return 0; }

strtok

char* strtok(char* str,const char* sep)

sep参数是个字符串,定义了用作分隔符的字符集合

注意事项:

  1. 第一个参数指定一个字符串,他包含了0个或者多个由sep字符串中1个或者多个分隔符的标记
  2. strtok找到str中的下一个标记,并将其用'\0'结尾,返回一个指向这个标记的指针(strtok会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可以修改)
  3. 若strtok函数第一个参数不为NULL时,函数将找到str中的第一个标记,str函数将保存他在字符串中的位置
  4. 若strtok函数第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始找下一个标记
  5. 如果字符串不存在更多的标记,则返回NULL指针
  6. 第一个参数为NULL的strtok函数会匹配距离它最近的第一个参数不是NULL指针的strtok。

错误信息报告---strerror

char* strerror(int errnum);

strerror:返回错误码对应的信息

int main() { //错误码 错误信息 //0 - No error //1 - Operation not permitted //2 - No such file or directory //... ... //全局的错误变量/错误码的变量 //当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码赋值到errno中 /*char* arr = strerror(errno); printf("%s\n", arr);*/ FILE* pf=fopen("text.txt","r"); if (pf==NULL) { printf("%s\n", strerror(errno)); } else { printf("open file success"); } return 0; }


字符分类函数

字符做操作

int main() { char ch = 'w'; //如果是小写字母返回非零值,如果不是小写字符返回0; int ret = islower(ch); //十进制数字0-9 int ret1 = isdigit(ch); //空白字符“空格” 换页"\f" 换行"\n" 回车"\r" 制表符"\t" 垂直制表符"\v" int ret1 = isspace(ch); //十六进制包括a-f A-F int ret1 = isxdigit(ch); //任何控制字符 int ret1 = iscntrl(ch); //大写字母A-Z int ret1 = isupper(ch); //字母a-z,字母A-Z int ret1 = isalpha(ch); //字母或者数字 a-z,字母A-Z 数字0-9 int ret1 = isalnum(ch); //标点符号,任何不属于数字或者字母的图形字符 int ret1 = ispunct(ch); //任何图形字符 int ret1 = isgraph(ch); //任何可打印字符包括图形字符和空白字符 int ret1 = isprint(ch); int ret1 = printf("%d\n", ret); //字符转换 //tolower--转小写字母 //toupper--转大写字母 //如果是小写不动,大写转化为小写 char ch = tolower('Q'); //printf("%c\n",ch); putchar(ch); return 0; }

strcat strcpy strcmp---操作对象是字符串 ‘\0’

整形数组,浮点型数组,结构体数组就不能用'\0'了;


内存操作函数---memcpy,memmove,memset,memcmp

memcpy -- 内存拷贝:即能拷贝整形,浮点型,结构体,字符串

void* mencpy(void* dest,const void* source,size_t num/*单位是字节*/)

如果使用memcpy拷贝时,两个字符串要是有交集,因为会被覆盖(但是可以成功,vs2013可以胜任这个工作)---c语言标准,memcpy只要处理,不重叠的内存拷贝就可以

memmove -- 处理重叠内存的拷贝

void* men(void* dest,const void* source,size_t num/*单位是字节*/)

memcmp---内存比较,比较结果和strcmp的结果是一样的

void* mencmp(void* dest,const void* source,size_t num/*单位是字节*/) int main() { int arr1[] = { 1,2,3,5,6,7,8,9 }; int arr2[] = { 1,2,3,6,3,1,0,9 }; int ret = memcmp(arr1, arr2, 8);//8的单位是字节---结果是0---如果输入的是16则arr1和arr2的第四个不相同则会返回-1 printf("%d\n", ret); return 0; }

memset---设置一个缓冲区为一个特定的字符

void* memset(void* dest,int c,size_t count)

dest----是目标字符串(那块空间进行设置) c-----设置的字符是什么 count-----要设置多少个字符

注意事项----count的单位是字节

int main() { char arr[10] = ""; int arr1[10] = { 0 }; memset(arr,'*',7); //01 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00... memset(arr1, 1, 10);//这种情况只能改掉前两位,和第三位的前两个字节,而且输出的之是16843009,并不是1 return 0; }



NULL---空指针

NUL/Null---‘\0’;








标签:元素个数