现场手写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;

}

 

posted @ 2015-09-26 23:11  Uncle_Nucky  阅读(228)  评论(0编辑  收藏  举报