typedef unsigned char BYTE8;
松北ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
void setbit(BYTE8 bits[], int index)
{
int a = index3;/*計(jì)算字節(jié)數(shù)*/
int b = index7;/*計(jì)算字節(jié)內(nèi)的位數(shù)*/
BYTE8 mask=0x80;/*第一位是1的掩碼*/
bits[a] |= (maskb);
}
PS:順便寫個(gè)取得某一個(gè)位是0還是1的函數(shù)。
int getbit(BYTE8 bits[], int index)
{
int a = index3;/*計(jì)算字節(jié)數(shù)*/
int b = index7;/*計(jì)算字節(jié)內(nèi)的位數(shù)*/
BYTE8 mask=0x80;/*第一位是1的掩碼*/
return (bits[a] (maskb))!=0;
}
這樣:
#includestdio.h
// 計(jì)算字符串長度
int len(char a[])
{
int temp=0,i;
for(i=0;a[i]!='\0';i++)
temp++;
return temp;
}
// 獲取子串在源串中首次出現(xiàn)的位置索引
int index(char a[], char b[])
{
int i,j,temp;
for(i=0;ilen(a)-len(b);i++)
{
temp=i;
j=0;
while(j=len(b) a[temp]==b[j])
{
temp++;
j++;
}
if(j==len(b))
return i;
}
return -1;//返回-1則沒找到指定的子串,否則找到
}
void main()
{
char a[]="hello";
a[len(a)]=' ';//算法改進(jìn),在數(shù)組a的末尾新增一個(gè)空的元素,這樣才能hello中找到hello
printf("%d\n",index(a,"llo"));
}
擴(kuò)展資料:
注意事項(xiàng)
頭文件:#include string.h
strchr() 用來查找某字符在字符串中首次出現(xiàn)的位置,其原型為:
char * strchr (const char *str, int c);
參數(shù):str 為要查找的字符串,c 為要查找的字符。
strchr() 將會找出 str 字符串中第一次出現(xiàn)的字符 c 的地址,然后將該地址返回。
注意:字符串 str 的結(jié)束標(biāo)志 NUL 也會被納入檢索范圍,所以 str 的組后一個(gè)字符也可以被定位。
返回值:如果找到指定的字符則返回該字符所在地址,否則返回 NULL。
返回的地址是字符串在內(nèi)存中隨機(jī)分配的地址再加上你所搜索的字符在字符串位置。設(shè)字符在字符串中首次出現(xiàn)的位置為 i,那么返回的地址可以理解為 str + i。
提示:如果希望查找某字符在字符串中最后一次出現(xiàn)的位置,可以使用?strrchr()?函數(shù)。
實(shí)例:查找字符5首次出現(xiàn)的位置。
#include?stdio.h
#include?stdlib.h
#include?string.h
int?main(){
char?*s?=?"0123456789012345678901234567890";
char?*p;
p?=?strchr(s,?'5');
printf("%ld\n",?s);
printf("%ld\n",?p);
system("pause");
return?0;
}
輸出結(jié)果:
12016464
12016469
C 實(shí)現(xiàn):
#include stdio.h
void getNext(char pat[], int next[])
{
int j = 0;
int k = -1;
next[0] = -1;
while (pat[j])
{
if ( k == -1 || pat[j] == pat[k])
{
j++;
k++;
next[j] = k;
}
else
{
k = next[k];
}
}
}
int index(char str[], char dest[])
{
int i = 0;
int j = 0;
int next[255];
getNext(dest, next);
while (str[i])
{
if (dest[j] == '\0')
{
return (i - j+1);
}
if (str[i] == dest[j])
{
i++;
j++;
continue;
}
i += next[j+1]+1;
}
if (dest[j] == '\0')
{
return (i - j+1);
}
return 0;
}
1.char *index(char *str,char ch)
{char *p;
for(p=str;*p!='\0';p++)
if(*p==ch) break;
if(*p=='\0') p=0;
return (p);
}
char *index(char *str,char ch)
{
char *p ;
for (p = str; *p != '\0'; p++)
{
if (*p == 'ch') { return p;}
}
else
return NULL;
}