//1.子字符串查找,如果找到返回第一個字符下標,找不到返回-1 複雜度O(m*n)
int strfind(const char * str,const char* substr)
{
if(str==NULL||substr==NULL)
{
return -1;
}
int len1=strlen(str);
int len2=strlen(substr);
if(len1<len2)
return -1;
int c=len1-len2;
int i,j;
for(i=0;i<=c;i++)
{
for( j=0;j<len2;j++)
{
if(str[i+j]!=substr[j])
break;
}
if(j==len2)
return i+1;
}
return -1;
}
//2.在字符轉中找到第一個只出現一次的字符
char FirstCharNotRepeated(const char *str)
{
int table[256];
if(!str)
{
return '\0';
}
for(int i=0;i<256;i++)
{
table[i]=0;
}
int len=strlen(str);
for(int i=0;i<len;i++)
{
table[str[i]]++;
}
for(int i=0;i<len;i++)
{
if(table[str[i]]==1)
return str[i];
}
return '\0';
}
//3.字符串拷貝
char *strcpy(char *dest,const char* src)
{
if(dest==src)
{
return dest;
}
assert(dest!=NULL&&src!=NULL);
char* p=dest;
while(*src!='\0')
{
*dest++=*src++;
}
*dest='\0';
return p;
}
//4.查找字符串首次出現的字符位置
char * strchr( char *str,char c)
{
assert(str!=NULL);
while(*str++!='\0')
{
if(c==*str)
return str;
}
return NULL;
}
//5.字符串比較
int strcmp(const char *s1,const char *s2)
{
assert(s1!=NULL&&s2!=NULL);
while(*s1&&*s2&&*s1==*s2)
{
s1++;
s2++;
}
return (*s1-*s2);
}
//6.n個字符拷貝
char *strncpy(char *dest,const char * src,unsigned int n)
{
assert(dest!=NULL&&src!=NULL);
char *p=dest;
while(n--&&*src!='\0')
{
*dest++=*src++;
}
*dest='\0';
return p;
}
//7.字符串拼接
char *strcat(char *dest,const char *src)
{
assert(dest!=NULL&&src!=NULL);
char *p=dest;
while(*dest++!='\0');
while(*src!='\0')
*dest++=*src++;
*dest='\0';
return p;
}
//8.求字符串長度
int strlen1(const char *str)
{
assert(str!=NULL);
int len=0;
while(*str++!='\0')
len++;
return len;
}
//9.將字符串拷貝到新的位置
char *dup(char *src)
{
if(src!=NULL)
{
int len=0;
char *temp=src;
while(*src++!='\0')
len++;
char *start=(char*)malloc(sizeof(char)*(len+1));
assert(start!=NULL);
while(*temp!='\0')
*start++=*temp++;
*start='\0';
return (start-len);
}
return NULL;
}
//10.從src中取n個字符拼接到dest後面
char *strncat(char *dest,const char *src,unsigned int n)
{
assert(dest!=NULL&&src!=NULL);
char *p=dest;
while(*dest++!='\0');
while(n--&&*src!='\0')
*dest++=*src++;
*dest='\0';
return p;
}
//11.字符翻轉
char *strrev(char *str)
{
assert(str!=NULL);
char *s=str,*s2=str,temp;
while(*s!='\0')
s++;
--s;
while(s2<=s)
{
cout<<*s<<*s2<<endl;
temp=*s;
*s=*s2;
*s2=temp;
s2++;
s--;
}
return str;
}
//12.將src數組的count個字節搬到destiny數組
void *memcpy(void *dest, const void *src, unsigned int count)
{
assert(dest!=NULL&&src!=NULL);
void *p=dest;
while(count--&&*(char*)src!='\0')
{
*(char*)dest=*(char*)src;
dest=(char*)dest+1;
src=(char*)src+1;
}
return p;
}
//13.將s所指向的某一塊內存中的每個字節的內容全部設置爲ch指定的ASCII值
void *memset(void *s, int ch, unsigned n)
{
assert(s!=NULL);
void *p=s;
while(n--)
{
*(char*)p=(char)ch;
p=(char*)p+1;
}
return s;
}
c語言常見函數自編寫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.