当前位置: 首页 > news >正文

建网站代理哪个武汉企业seo推广

建网站代理哪个,武汉企业seo推广,虚拟网站建设步骤,海报设计图片手绘图前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.求字符串长度 strlen 1.1 strlen size_t strlen ( const char * s…

前言

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在
常量字符串 中或者 字符数组 中。
字符串常量 适用于那些对它不做修改的字符串函数.

1.求字符串长度
strlen

1.1 strlen

size_t strlen ( const char * str );

字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。

参数指向的字符串必须要以 '\0' 结束。
注意函数的返回值为size_t,是无符号的( 易错 )
学会strlen函数的模拟实现

 

 strlen是一个库函数,是用来求字符串的长度的,len1和len2的值是一样的,因为str是char*类型的指针,指向的是a的地址。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{const char* str = "abcdef";size_t len1 = strlen("abcdef");size_t len2 = strlen(str);printf("%d\n", len1);printf("%d\n", len2);return 0;
}

 需要注意的是strlen遇到\0就会停止统计,假设我们在c的后面放上\0,那么答案就是3.


 我们需要注意的是strlen的返回值是size_t,是无符号数,所以-3被认定为无符号数,最高位的1被认为是正数,所以结果是>=0。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{//两个无符号数相减得到的还是无符号数//  3             - 6//-3//10000000000000000000000000000011//11111111111111111111111111111100//11111111111111111111111111111101//if (strlen("abc") - strlen("abcdef") > 0)printf(">=\n");elseprintf("<\n");return 0;
}


2.长度不受限制的字符串函数
strcpy
strcat
strcmp
 

 2.1 strcpy

char* strcpy(char * destination, const char * source );

源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。
学会模拟实现。

strcpy这个库函数的作用是 将指向的 C 字符串复制到目标指向的数组中,包括终止的 null 字符(并在该点停止)。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{char arr1[20] = {0};char arr2[] = "HELLO";strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

 如果我们这样使用strcpy的话,就会出错,因为p里面存放的是常量字符串,是不能被修改的。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{char* p = "abcdefghi";char arr2[] = "HELLO";strcpy(p, arr2);//errprintf("%s\n", p);return 0;
}

2.2 strcat

char * strcat ( char * destination, const char * source );

源字符串必须以 '\0' 结束。
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。 

 strcat这个库函数的参数跟strcpy是一样的。这个库函数运行的第一步应该是找到目标字符串的末尾,也就是\0,找到之后再把源字符串的内容追加到目标字符串里面去,并且源字符串的\0也会追加过去。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{char arr1[20] = "abc";char arr2[] = "def";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

 


2.3 strcmp

int strcmp ( const char * str1, const char * str2 );

 标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

 strcmp比较的不是长度,而是对应位置上的字符的大小(ASCII码值)。

如果第一个字符大小相同则进行后面的比较。

 这里我们需要重要的是strcmp的返回值是int类型,两个参数都是char*的指针,是不能被改变的。

 strcmp规定是:

目标字符串>源字符串则返回>0;

目标字符串<源字符串则返回<0;

目标字符串=源字符串则返回=0;

 但是在vs编译器上分别是1,-1,0。在各个编译器上的返回值是不一样的,满足条件即可。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{char arr1[] = "abc";char arr2[] = "abq";int ret = strcmp(arr1, arr2);printf("%d", ret);return 0;
}

3.长度受限制的字符串函数介绍
strncpy
strncat
strncmp

3.1strncpy

char * strncpy ( char * destination, const char * source, size_t num );

拷贝num个字符从源字符串到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

 

 strncpy和strcpy的前两个参数是一样的,只是返回值是char*的指针,返回的是目标字符串。并且strncpy还多了一个参数size_t num,下面这个代码的意思就是将源字符串的前三个字符拷贝到目标字符数组里面去。

#define _CRT_SECURE_NO_WARNINGS 1
#include <string.h>
#include<stdio.h>
int main()
{char arr1[20] = { 0 };char arr2[] = "abcdefghi";strncpy(arr1, arr2, 3);printf("%s\n", arr1);return 0;
}

 


3.2 strncat

char * strncat ( char * destination, const char * source, size_t num );

 strncat和strcat的区别也是strncat要多一个参数size_t num,num就是我们要在目标字符串里面追加源字符串的字符个数,同时会将\0放在追加后的目标字符串的末尾。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{char arr1[20] = "abc";char arr2[] = "defghi";strncat(arr1, arr2, 3);printf("%s\n", arr1);return 0;
}


3.2 strncmp

int strncmp ( const char * str1, const char * str2, size_t num );

 strncmp和strcmp的区别也是strncmp要多一个参数size_t num,num就是两个字符串要比较的字符个数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abczef";char arr2[] = "abcqw";int ret = strncmp(arr1, arr2, 4);printf("%d\n", ret);return 0;
}

 因为'z'的ASCII码值大于’q‘,所以返回的是1.


4.strstr

char * strstr ( const char *str1, const char * str2);

 strstr就是在字符串中查找字符串,且是返回第一次出现的指针,如果没有则返回NULL。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{char arr1[] = "abcdefghiabcdeqghi";char arr2[] = "deq";char * ret = strstr(arr1, arr2);if (ret == NULL){printf("找不到\n");}else{printf("%s\n", ret);}return 0;
}

 

 如果次字符串出现多次,也是返回第一次出现的指针。


5.strtok

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

 sep参数是个字符串,定义了用作分隔符的字符集合
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回 NULL 指针。

 strtok是用来切割字符串的,比如说下面这个代码,p里面是分隔符的集合,此时调用strtok函数就会在arr里面去找@,然后改成\0,同时返回z的地址。

#include<string.h>
int main()
{char arr[] = "sauxchnajd@yeah.net";char* p = "@.";char* s=strtok(arr, p);printf("%s\n", s);return 0;
}

 strtok函数会改变被操作的字符串,所以我们最好用一个临时拷贝的内容并且可修改,所以使用strcpy将字符串的内容拷贝过来,这个时候想怎么改buf都可以,对arr没有影响。

int main()
{char arr[] = "sauxchnajd@yeah.net";char* p = "@.";char buf[200] = {0};strcpy(buf, arr);char* s=strtok(buf, p);printf("%s\n", s);return 0;
}

strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。所以我们如果要找第二个分隔符,我们就进行第二次调用strtok,第一个参数用NULL,这时strtok就会在第一个标记开始往后查找。

int main()
{char arr[] = "sauxchnajd@yeah.net";char* p = "@.";char buf[200] = {0};strcpy(buf, arr);char* s=strtok(buf, p);printf("%s\n", s);s = strtok(NULL, p);printf("%s\n", s);return 0;
}

 我们再次调用效果和第二次就是一样的了,在标记后往后查找。

int main()
{char arr[] = "sauxchnajd@yeah.net";char* p = "@.";char buf[200] = {0};strcpy(buf, arr);char* s=strtok(buf, p);printf("%s\n", s);s = strtok(NULL, p);printf("%s\n", s);s = strtok(NULL, p);printf("%s\n", s);return 0;
}

如果字符串中不存在更多标记的时候,则返回空指针。 

strtok函数的真正用法是下面这个代码:

当使用p第一次切割arr的时候,如果返回值不是NULL,则打印出s指向的字符串,然后调整阶段就二次调用,使用NULL。这个for循环的初始化部分只执行了一次,因为strtok这个函数只有第一次传的是非空指针,后面都是NULL。

int main()
{char arr[] = "sauxchnajd@yeah.net";char* p = "@.";char buf[200] = {0};strcpy(buf, arr);char* s = NULL;for (s = strtok(buf, p);s!=NULL;s=strtok(NULL,p)){printf("%s\n", s);}return 0;
}

 


6.strerror

char * strerror ( int errnum );

strerror这个函数是将错误码翻译成错误信息,返回错误信息的字符串的起始地址 。

那么什么是错误码呢?无论是使用库函数还是进行正规的软件设计的时候都会设计错误码,就是当程序发生错误的时候,会报出错误信息。在C语言中,如果发生错误就会将错误码放在errno的变量中,errno是一个全局变量,可以直接使用。我们如果想知道0,1,2,3这种数字在错误码中代表着上面,那我们就使用strerror来试一下:

int main()
{int i = 0;for (i = 0; i < 10; i++){printf("%d: %s\n", i, strerror(i));}return 0;
}

 但正常的使用方法是发生什么问题我们就将这个问题的错误码传给strerror,然后翻译出来。

这里举一个打开文件的例子,fopen 以读的形式打开文件,如果文件存在,打开成功,如果文件不存在,打开失败。

int main()
{FILE* pf = fopen("add.txt", "r");if (pf == NULL){printf("打开文件失败,原因是:%s\n", strerror(errno));return 1;}else{printf("打开文件成功\n");}return 0;
}

 

 这里还有一个函数叫perror,直接打印错误码,所对应的错误信息。可以这样理解,perror == printf + strerror。

int main()
{FILE* pf = fopen("add.txt", "r");if (pf == NULL){perror("打开文件失败"); return 1;}else{printf("打开文件成功\n");}return 0;
}


今天的分享到这里就结束啦!谢谢老铁们的阅读,让我们下期再见。

http://www.ds6.com.cn/news/112714.html

相关文章:

  • wordpress 读取数据库优化是什么意思
  • 爱站网ip反域名查询百度指数怎么看排名
  • 单页营销分享网站网站投放广告费用
  • 张家港网站制作哪家好企业查询网站
  • 网站开发详情上海职业技能培训机构
  • 兼职做任务的网站哪家培训机构好
  • 最新房价数据出炉青岛关键词优化seo
  • 365网站学软件开发学费多少钱
  • 珠海横琴天聚建设工程有限公司网站论文收录网站有哪些
  • 彩票网站开发公司上海seo网站策划
  • 赣州seo公司北京seo加盟
  • 烟台 o2o平台带动做网站行业常见的网络营销平台有哪些
  • seo搜狗西安关键词优化软件
  • 网站建设 作用谷歌google搜索引擎入口
  • 做电脑网站用什么软件好用深圳网络推广代理
  • 益阳市城乡和住房建设部网站花西子网络营销案例分析
  • 消防维保公司宣传册设计样本鼓楼网站seo搜索引擎优化
  • 做投票的网站电商软文广告经典案例
  • 公司网站建设网站优化网络推广卖网站链接
  • 外贸网站建设知识 列表最好的bt种子搜索引擎
  • 可用的ftp网站网络推广服务外包公司
  • 学校网站源码开源小红书推广怎么做
  • 企业备案网站名称怎么填网址查询域名解析
  • 写作网站seo网站优化策划书
  • 国外网站如何做推广微信广告投放推广平台
  • 深圳网站设计排名线上商城的推广方案
  • seo 网站推广入门新网店怎么免费推广
  • 自己建设网站多少钱小程序搭建
  • 为何公司做的网站很丑青岛seo外包服务
  • 想做网站多少钱网络推广员有前途吗