现场手写Coding
编写strstr,strcpy,strpbrk的函数
库函数,细节的把握,编程能力扎实过硬
==============================================================================
==============================================================================
字符串查找strstr()
int strstr ( char * string, char * substring)
==============================================================================
==============================================================================
查找第一个只出现1次的字符
char FirstNotRepeatChar(char* pString)
{
if(!pString) return '\0';
const int tableSize = 256;
int hashTable[tableSize] = {0};
char* pHashKey = pString;
while(*(pHashKey)! = '\0')
hashTable[*(pHashKey++)]++;
while(*pString != '\0')
{
if(hashTable[*pString] == 1)
return *pString;
pString++;
}
return '\0';
}
ASCII码表:
1 - 49
0 - 48
A - 65
a - 97
==============================================================================
==============================================================================
方法二:
#include<stdio.h>
#include<string.h>
const int N = 26;
int bit_map[N];
void findNoRepeat(char* src)
{
int pos;
chat* str = src;
int i,len = strlen(src);
for(i=0;i<len;i++)
bit_map[str[i]-'a']++;
for(i=0;i<len;i++)
{
if(bit_map[str[i]-'a' == 1)
{
printf("%c",str[i]);
return;
}
}
}
==============================================================================
==============================================================================
查找字符串中首次出现字符C的位置
char* strchr(const char* str,int c)
{
assert(str != NULL);
while(*s != '\0' && *s != c)
==S;
return (*s == c) ? s:NULL;
}
==============================================================================
==============================================================================
char* strcat(char* strDes,const char* strSrc)
P184/401
==============================================================================
==============================================================================
C中的qsort()函数
#include<stdlib.h>
void qsort(void* base,int nelem,intwidth,int(*fcmp)(const void*,const void*));
int cmp(const void* a,const void* b)
{
return *(int*)a - *(int*)b;
}
int cmp(const void* a,const void* b)
{
return ((*(double*)a-*(double*)b)>0?1:-1);
}
==============================================================================
==============================================================================
反转字符串
void reverse ( char* str )
{
assert(str != NULL); //#include<assert.h>
char* head = str;
while ( *str++ ) { };
str--;
char* tail = str--;
while(head<tail)
{
*head ^= *tail;
*tail-- ^= *head;
*head++ ^= *tail;
}
}
反转字符串(不申请变量和空间) 有道云笔记 |
strstr()函数:是否有子字符串 finds the first occurrence of string2 in string1 |
char * strstr (const char * str1,const char * str2)
{
char *cp =(char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
char *mystrstr(char *s1 , char *s2)
{
if(*s1==0)
{
if(*s2) return(char*)NULL;
return (char*)s1;
}
while(*s1)
{
int i=0;
while(1)
{
if(s2[i]==0) return s1;
if(s2[i]!=s1[i]) break;
i++;
}
s1++;
}
return (char*)NULL;
}