[c語言]對各種字串庫函式的實現strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
1.模擬實現strcpy
//1.模擬實現strcpy(字串拷貝)
#include<stdio.h>
#include<assert.h>
char * my_strcpy(char *dest,const char *str)
{
char *p = dest;
assert(dest);
assert(str);
while(*dest++ = *str++)
{
;
}
return p;
}
int main()
{
char *arr = "hello world";
char a[1024] = {0};
my_strcpy (a,arr);
puts(a);
return 0;
}
2.模擬實現strcat
//2.模擬實現strcat(字串拼接)
#include<stdio.h>
#include<assert.h>
char * my_strcat(char *dest,const char *src)
{
char *p = dest;
assert(src);
while(*dest)//不能用while(*dest++),因為strcat的功能是把src所指字串新增到dest結尾處(覆蓋dest結尾
//處的'\0')並新增'\0',while(*dest++)在迴圈結束後還會執行一次++,會指向'\0'的下一個位置
{
dest++;
}
while(*dest++ = *src++)
{
;
}
return p;
}
int main()
{
char *str = "man";
char arr[1024] = "hello ";
my_strcat(arr,str);
puts(arr);
return 0;
}
3.模擬實現strstr
//3.模擬實現strstr(字串查詢,一個字串是否是另一個字串的子串)
#include<stdio.h>
#include<assert.h>
char * my_strstr(char * dest, const char *src)
{
const char *s1 = dest;//父串
const char *s2 = src;//子串
const char *cur = dest;//記錄父串地址
assert(dest);
assert(src);
if(*src == '\0')
return dest;
while(*cur)
{
s1 = cur;
s2 = src;
while(*s1 == *s2 && *s1 != '\0' && *s2 != '\0')//注意一定要判斷是否到'\0',否則會死迴圈
{
s1++;
s2++;
}
if(*s2 == '\0')
{
return (char *)cur;
}
if(*s1 == '\0')
{
return NULL;
}
cur++;
}
return NULL;
}
int main()
{
char *arr1 = "i am a student";
char *arr2 = "student";
char *ret = my_strstr(arr1,arr2);
puts(ret);
return 0;
}
4.模擬實現strchr
//4.模擬實現strchr(查詢一個字元在字串首次出現的位置)
#include<stdio.h>
#include<assert.h>
char * my_strchr(const char *dest,int n)
{
assert(dest);
while(*dest)
{
if(*dest == n)
{
return (char*)dest;
}
dest++;
}
return NULL;
}
int main()
{
char *str = "asdfghjk,l";
char *ptr = my_strchr(str,'h');
printf("%c這個字元在%s的首字元\n",'h',ptr);
return 0;
}
5.模擬實現strcmp
//5.模擬實現strcmp(比較字串)
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char *str1,const char *str2)
{
assert(str1);
assert(str2);
while(*str1 && *str2)
{
if(*str1 > *str2)
return 1;
else if(*str1 < *str2)
return -1;
else
{
str1++;
str2++;
}
}
return 0;
}
int main()
{
char *arr1 = "good";
char *arr2 = "bad";
int ret = my_strcmp(arr1,arr2);
if(ret > 0)
{
printf("字串1大於字串2\n");
}
else if(ret < 0)
{
printf("字串1小於字串2\n");
}
else
{
printf("兩字串相等\n");
}
return 0;
}
6.模擬實現memcpy
//6.模擬實現memcpy(從源指向的位置(起始位置)將count位元組的值直接複製到目標指向的記憶體塊)
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dest,const void *src,size_t count)
{
char *p = dest;//給目標和源轉換型別,否則void*不知道大小
char *p1 = dest;
const char *p2 = src;
assert(dest);
assert(src);
while(count--)
{
*p1++ = *p2++;
}
return p;
}
int main()
{
char arr1[1024] = {0};
char *arr2 = "hello world";
my_memcpy(arr1,arr2,7);
puts(arr1);
return 0;
}
7.模擬實現memmove
//7.模擬實現memmove(從源指向的位置拷貝count個位元組的值放在目標所指向的位置)
//memmove用於從src拷貝count個位元組到dest,如果目標區域和源區域有重疊的話,
//memmove能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中。
//但複製後src內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函式功能相同。
#include<stdio.h>
#include<assert.h>
void * my_memmove(void *dest,const void *src, size_t count)
{
char *ret = dest;
char *p1 = dest;
const char *p2 = src;
assert(src);
assert(dest);
if(dest < src)
{
while(count--)
{
*p1++ = *p2++;
}
}
else
{
while(count--)
{
*(p1+count) = *(p2+count);
}
}
return ret;
}
int main()
{
char str1[1024] = "abcde";
char *str2 = "fghijk";
my_memmove(str1+4,str2,5);
puts(str1);
return 0;
}
相關推薦
[c語言]對各種字串庫函式的實現strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove
1.模擬實現strcpy //1.模擬實現strcpy(字串拷貝) #include<stdio.h> #include<assert.h> char * my_strcpy(char *dest,const char *str) {
對strcpy strcat strstr strchr strcmp memcpy memmove的自我編譯
1.實現strcpy #include<stdio.h> #include<assert.h> char* m_strcpy(char* dest, const char* src) { char *ret = dest; assert(
c語言對時間的處理函式和計時的實現
關鍵字:c語言 時間函式 time.h c語言時間函式,時間頭函式 所有程式碼編譯環境:MSVC6.0 1,時間的獲取: 通過time()函式來獲得日曆時間(Calendar Time),其原型為:time_t time(time_t * timer); #incl
C語言字元和字串處理函式(二)strchr,strpbrk,strstr
查詢字元或者字串 查詢一個字元:和和和strchr()。 函式返回一個指向STR中CH首次出現的位置,當沒有在STR中找CH就報道檢視NULL。 查詢任意字元:strpbrk() 函式返回一個指標,它指向字串STR2中任意字元在字串STR1首次出現的位置,如果不存在返
C語言中呼叫靜態庫函式和動態庫函式的方式
C語言中呼叫動態庫函式的兩種方式 方式一.隱式呼叫 將動態庫的相關檔案拷貝到當前目錄下(lib、dll),然後新增以下程式碼,在程式中指定連線庫函式。 注意:第二個引數給出的是引入庫檔案(或稱“匯出庫檔案”),而不是dll。在程式執行過程中,lib將dll中需要用到的函式對映到對應的記憶
android的APP呼叫C語言的動態連結庫的實現步驟
1.新建一個類test,通過System.loadLibrary()的方式將so載入進去,注意不要帶有lib 和 so 比如libhello.so,為System.loadLibrary(hello),如下文所示,JAVA 呼叫addtest,返回的Addtest為jn
C語言中處理字串的函式
在C語言中有許多字串處理函式,在寫程式的時候常常想不起來或則不瞭解區別,今天就花點時間將這些函式做個總結,以便以後查詢使用。 一、輸入函式 scanf 與 scanf_s 函式 char buf[10] = { 0 }; scanf("%s",
c語言的split字串分割函式strtok的使用
c語言也有類似其他語言的split字串分割函式,就是strtok 標頭檔案:#include <string.h>定義函式:char * strtok(char *s, const char *delim);函式說明:strtok()用來將字串分割成一個個片段。
C語言中常用的庫函式
C語言中常用的標頭檔案如下: <assert.h> 斷言 <float.h> 浮點數運算 <locale.h> 本土化 <math.h> 數學函式 <signal.h>
C語言中的那些庫函式(持續更新中)
1.【exit()】 exit是在呼叫處強行退出程式,執行一次程式就結束。exit(0)表示正常退出。exit(1)表示異常退出,這個1是返回給作業系統的。無論是寫在main函式中,還是在其他函式中,都是程式退出。一般都是認為0是正常退出、其他數字是異常退出。所
【C語言】 使用回撥函式實現氣泡排序
實現功能:既能排序整型數,也可以排序字串 程式碼如下: #include <stdio.h> #include <string.h> int int_cmp(const v
C語言 呼叫的動態庫函式重名問題分析
設計兩個動態庫 第一個動態庫:libHelloc: func1.h #ifndef FUNC1_H_ #define FUNC1_H_ int func1(); void func(); #endif func1.c #include "func1.h" int
C語言檔案操作標準庫函式與Linux系統函式效率比較
我們都知道,C語言在UNIX/Linux系統下有一套系統呼叫(系統函式),比如檔案操作open()、close()、write()、read()等,而標準C語言的庫函式中也有一套對檔案的操作函式fopen()、fclose()、fwrite()、fread()等
C語言中的字串擷取函式及應用
/*======================================================== 子數整數 源程式名 num.??? (pas,c,cpp) 可執行檔名 num.exe 輸入檔名 num.in 輸出檔名 num.out 對於一個五位數a
C語言使用stdlib.h庫函式的二分查詢和快速排序程式
快速排序: #include <stdlib.h> #include <stdio.h> #include <string.h> #define LENGTH(x) sizeof(x)/sizeof(x[0]) /**輸出陣列元素
c語言==系統呼叫與庫函式的區別(28)
系統呼叫與庫函式的區別? (1)庫函式是語言或應用程式的一部分,而系統呼叫是核心提供給應用程式的介面,屬於系統的一部分 (2)庫函式在使用者地址空間執行,系統呼叫是在核心地址空間執行,庫函式執行
C 語言兩個動態庫函式重名問題
應用程式a(a.c),動態庫liba.so(liba.h, liba.c),libb.so,均實現了func() gcc -la -lb a.c 則呼叫的是liba.so中的函式實現 gcc -lb -la a.c 則呼叫的是libb.so中的函式實現
【C語言】模擬實現strcpy strcat strstr strcmp
模擬實現strcpy(字串拷貝) 這道題,是將原字串的內容拷貝到目標字串中去,一個字元一個字元的拷貝直到遇到 ‘\0’ ,將它也拷貝過去後停止。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include&
linux C --深入理解字串處理函式 strlen() strcpy() strcat() strcmp()
在linux C 程式設計中,我們經常遇到字串的處理,最多的就是字串的長度、拷貝字串、比較字串等;當然現在的C庫中為我們提供了很多字串處理函式。熟練的運用這些函式,可以減少程式設計工作量,這裡介紹幾個常用的字串函式,並編寫一些程式,如果沒有這些庫函式,我們將如何實
深入理解字串處理函式 strlen() strcpy() strcat() strcmp()
在linux C 程式設計中,我們經常遇到字串的處理,最多的就是字串的長度、拷貝字串、比較字串等;當然現在的C庫中為我們提供了很多字串處理函式。熟練的運用這些函式,可以減少程式設計工作量,這裡介紹幾個常用的字串函式,並編寫一些程式,如果沒有這些庫函式,我們將如何實現其功能; 1.求字串長度函式