您好,登錄后才能下訂單哦!
本篇內容介紹了“C語言字符串操作函數的實現方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
#include <stdio.h> #include <stdlib.h> #include <string.h> /*******string庫函數集合********/ int my_strlen(const char *str) { int ret = 0; assert(str != NULL); while(*str++ != '\0') ++ret; return ret; } /*******不得自定義變量*********/ int my_strlen2(const char *str) { if((*str) == '\0') return 0; else return (1 + my_strlen(++str)); } //=========字符串查找=========// char *my_strstr(char *strSrc, char *substr) { int i, j; int lenstr, sublen; int num; if(strSrc == NULL || substr == NULL) return NULL; lenstr = strlen(strSrc); sublen = strlen(substr); if(lenstr < sublen) return NULL; num = lenstr - sublen; for(i = 0; i <= num; i++) { for(j = 0; j < sublen; j++) { if(strSrc[i+j] != substr[j]) break; } if(j == sublen) return (strSrc + i); } return NULL; } char *my_strstr2(const char *strSrc, const char *str) { assert(strSrc != NULL && str != NULL); const char *s = strSrc; const char *t = str; for(; *strSrc != '\0'; ++strSrc) { for( s= strSrc, t = str; (*t != '\0') && (*s == *t); ++s, ++t ) { } if(*t == '\0') return (char *)strSrc; } return NULL; } //=========字符串拷貝=========// char *my_strcpy(char *strDst, char *strSrc) { if(strDst == strSrc) return strDst; assert( (strDst != NULL) && (strSrc != NULL) ); char *address = strDst; while( (*strDst++ = *strSrc++) != '\0'); return address; } char *my_strncpy(char *strDst, char *strSrc, int count) { assert(strDst != NULL && strSrc != NULL); char *address = strDst; while((count--) && (*strSrc != '\0')) *strDst ++ = *strSrc++; *strDst = '\0'; return address; } //==========字符串鏈接=========// char *my_strcat(char *strDst, const char *strSrc) { assert((strDst != NULL) && (strSrc != NULL)); char *address = strDst; while(*strDst != '\0') ++ strDst; while((*strDst++ = *strSrc++) != '\0'); return address; } char *my_strncat(char *strDst, const char *strSrc, unsigned int count) { assert((strDst != NULL) && (strSrc != NULL)); char *address = strDst; while(*strDst != '\0') ++strDst; while(count-- && *strSrc != '\0') *strDst++ = *strSrc++; *strDst = '\0'; return address; } //=========將字符串所有替換成字符=========// char *my_strset(char *str, int c) { assert(str != NULL); char *s = str; for(; *s != '\0'; ++s) *s = (char)c; return str; } char *my_strnset(char *str, int c, unsigned int count) { assert(str != NULL); char *s = str; for(; (*s != '\0') && ((s - str)<count); ++s) *s = (char) c; return str; } //===================================================== // 題目:比較2個字符串,用O(n)時間和恒量空間 //===================================================== int my_strcmp(const char *str1, const char *str2) { while((*str1 != '\0') && (*str2 != '\0') && (*str1 = *str2)) { str1++; str2++; } return (*str1 - *str2); } int my_strncmp(const char *str1, const char *str2, unsigned int count) { assert((str1 != NULL) && (str2 != NULL)); while(*str1 && *str2 && (*str1 == *str2) && count--) { ++ str1; -- str2; } return (*str1 - *str2); } //===========查找字符出現的位置============// char *my_strrchr(const char *str, int c) { assert(str != NULL); const char *s = str; while(*s != '\0') ++ s; for(--s; *s != (char)c; --s) { if(s == str) return NULL; } return (char *)s; } //===========字符串的逆序============// char my_strrev(char *str) { assert(str != NULL); char *s = str, *t = str, c; while(*t != '\0') ++t; for(--t; s < t; ++s, --t) { c = *s; *s = *t; *t = c; } return str; } //=========字符串的切割==========// char *my_strtok(char *strToken, const char *str) { assert(str != NULL); static char *last; if(strToken == NULL && (strToken = last)==NULL) return (NULL); char *s = strToken; const char * t = str; while(*s != '\0') { t = str; while(*t != '\0') { if(*s == *t) { last = s + 1; if(s - strToken == 0) { strToken = last; break; } *(strToken + (s - strToken))= '\0'; return strToken; } ++t; } ++s; } return NULL; } //=========內存拷貝========// void my_memcpy(void *dst, const void *src, unsigned int num) { assert((dst!=NULL) && (src != NULL)); void *address = dst; while(num--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return address; } //===========內存清零=========// void *my_memset(void *str, int c, unsigned int count) { assert(str != NULL); void *s = str; while(count --) { *(char *)s = (char)c; s = (char *)s + 1; } return str; } //===================================================== // 題目:在給定的字符串中查找【由給定字符ch構成的】長度最長的串 // 分析:例如在abccdefaaag中長度最長的是aaa // 返回值:查找串的首地址 //===================================================== char *search_str_maxlen(char *strSrc, char ch) { char *strTemp = NULL, *strDst = NULL; int iTemp, iCount = 0; while(*strSrc != '\0') { if((*strSrc) == ch) { iTemp = 0; strTemp = strSrc; while((*strSrc) == ch) { strSrc++; iTemp++; } if(iTemp > iCount) { iCount = iTemp; strDst = strTemp; } if((*strSrc)=='\0') break; } strSrc++; } return strDst; } //======================================================== // 題目:在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。 // 分析:這道題是2006 年google 的一道筆試題。 // 思路:將所有出現的字符的個數存儲在數組a中 //======================================================== char first_single_char(char *str) { int a[255]; char *p = str; memset(a, 0, 255*sizeof(int)); while(*p != '\0') { a[*p] ++; p++; } p = str; while((*p) != '\0') { if(a[*p] == 1) return *p; } return '\0'; } 花了一個下午,終于搞定。
“C語言字符串操作函數的實現方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。