strcspn函数
来源:互联网 发布:网络市场调研的概念 编辑:程序博客网 时间:2024/06/06 01:55
/*
strcspn
原型:size_t strcspn(const char *s1,const char *s2);
相关头文件:string.h
功能:顺序在字符串s1中搜寻与s2中字符的第一个相同字符,包括结束符NULL,返回这个字符在S1中第一次出现的位置。
说明:(返回字符串s1中第一个在s2中出现的字符在s1中的下标值,亦即在s1中出现而s2中没有出现的子串的长度。)
这个可以看做是strchr函数的字符串版,很明显得设立两个指针,同时来遍历s1和s2.
*/
#include <stdio.h>size_t strcspn(const char *s1, const char *s2){const char *p; //设立两个同类型的指针const char *r;size_t count = 0; //返回值for (p = s1; *p!= '\0'; p++){for (r = s2; *r != '\0'; r++){if (*r == *p){return count;//找到字符则返回。}}++count;//因为是返回这个字符在S1中第一次出现的位置,所以指针p每移动一次,count+1;}return count;//没有找到则返回空字符在S1中出现的位置}int main (){ char str[] = "fcba73"; char keys[] = "12a4560890"; int i; i = strcspn(str,keys); printf ("The first number in str is at position %d.\n",i+1); return 0;}
//linux源码
size_t strcspn(const char *s, const char *reject) { const char *p; const char *r; size_t count = 0; for (p = s; *p != '\0'; ++p) { for (r = reject; *r != '\0'; ++r) { if (*p == *r) return count; } ++count; } return count; }
**FUNCTION<<strcspn>>---count characters not in stringINDEXstrcspnANSI_SYNOPSISsize_t strcspn(const char *<[s1]>, const char *<[s2]>);TRAD_SYNOPSISsize_t strcspn(<[s1]>, <[s2]>)char *<[s1]>;char *<[s2]>;DESCRIPTIONThis function computes the length of the initial part ofthe string pointed to by <[s1]> which consists entirely ofcharacters <[NOT]> from the string pointed to by <[s2]>(excluding the terminating null character).RETURNS<<strcspn>> returns the length of the substring found.PORTABILITY<<strcspn>> is ANSI C.<<strcspn>> requires no supporting OS subroutines. */#include <string.h>size_t_DEFUN (strcspn, (s1, s2),_CONST char *s1 _AND_CONST char *s2){ _CONST char *s = s1; _CONST char *c; while (*s1) { for (c = s2; *c; c++){ if (*s1 == *c) break;} if (*c)break; s1++; } return s1 - s; //利用指针的特性,少了一个临时变量}
//这个程序太精妙了,很值得学习
size_t strcspn( const char * str1, const char * str2 ){int count = 0;// map有32个字节的大小,也就是256个bit,可把map看成一个2维数组[32][8]unsigned char map[32] = {0}; // 每个ASCII码(设为c)有8bit,把它分成2部分,低3位构成下标j(通过c&7(2进制为111)), // 高5位构成下标i(通过c>>3得到)。这样在map[i][j]中置1表示字符存在// 对于字符’1’,其ASCII码为0x31,右移3位得到6,和7与运算得到1,也就是在map[6]中的第一位.//一个unsigend char有8位,拆为高5位与低3位。前5位的范围有0~32,所以申请32大小的数组map。//直接将前5位映射成成数组下标,后3位范围0~7,正好是每一项char(8bit)。这个算法把时间与空间结合起来,效率非常高。 while(*str2) { map[*str2 >> 3] |= (1 << (*str2 & 7)); str2++; } map[0] |= 1; while(!(map[*str1 >> 3] & (1 << (*str1 & 7)))) {//如果s1中没有 count++; str1++; } return count;}
- strcspn函数
- strcspn() 函数
- strcspn () 函数
- strcspn函数
- strcspn函数
- strcspn函数
- strcspn函数
- strspn函数 strcspn函数
- strspn函数&&strcspn函数
- strspn strcspn 函数
- strcspn和strspn函数
- strcspn和strspn函数
- strspn()函数和strcspn()函数
- strcspn
- strcspn
- 一天一个CRT函数 strcspn
- 一天一个CRT函数 strcspn
- C语言之strcspn函数
- 史玉柱
- Linux下查看文件和文件夹大小
- 【C语言的学习】第八回合:函数大集合
- Android客户端向Python服务器以POST方式传输数据
- C# 序列化 反序列化
- strcspn函数
- 通用SQL分页存储过程
- 判断文件和文件夹存在是几种方法
- ios 实现地图的定位,查询,自定义大头针
- SQL Server 触发器
- 1052. Linked List Sorting (25)
- linux中c语言和php语言通信代码UDP&TCP
- 【Java程序运行超时后退出或进行其他操作的实现】
- 【每天一个Linux命令】18. 设置指令别名命令alias