模擬實現strcpy、模擬實現strlen、模擬實現strstr函式
1.模擬實現strcpy(strcpy函式的功能是實現字串的複製)
方法一:
演算法思想:定義兩個指標變數dest、str,分別指向目的字串、原字串,只要str指向的內容不為\0,完成複製,返回目的字串的首地址
注意:
(1)將原字串指標定義為 const型別(只讀,不可修改)
(2)這個函式是模擬strcpy庫函式,其返回值是目的字串的地址,所以呼叫時直接以%s(字串形式) 返回目的字串首地址,即可返回出被複制好的字串
(3)由於執行程式時改變了原、目的字串指標,所以記得開始講目的字串首地址加以儲存
程式:
方法二:#include <stdio.h> char *my_copy(char *dest, const char *str) { char *ret=dest; //將目的指標保留,因為執行完下面的語句,目的指標dest已經指向字串末尾 while(*dest++ = *str++) //只要原字串中字元不為\0,完成複製 ; return ret; } int main() { char arr1[64]; char arr2[]="hello world"; my_copy(arr1, arr2); printf("%s\n",arr1); return 0; }
演算法思想:利用指標作用,將字串中的每一個字元一個一個複製
注意:
(1)字串常量不能被改變,所以接收字元時,應該定義一個稍微大一點的字元陣列接收傳過來的字元
(2)記得將指向陣列一的指標儲存起來,否則經過下面的語句之後指標就被修改
程式:
#include <stdio.h> int main() { //int i=0; char arr1[10]={0}; //定義一個字元陣列來接收各個字元 char arr2[]="defg"; char *p1=arr1; char *p2=arr2; char *p3=NULL; p3=p1; //將指向陣列一的指標儲存起來,否則經過下面的語句之後指標就被修改 while((*p2) != '\0') { *p1=*p2; //按照每次傳一個字元的方式 p2++; p1++; } while((*p3) != '\0') { printf("%c ",*p3); p3++; } return 0; }
2.模擬實現strlen(strlen函式的功能是計算字串長度,不包括'\0')
方法一:
演算法思想:編寫函式,定義一個指標1,再定義一個指標2,先用指標2將指標1指向保留,然後設定迴圈,只要指標2指向內容不為\0,將指標2向後移動,計數器加1,最後跳出
迴圈後,指標2指向\0;這時候指標2減去指標1就是原來字串的長度
注意:
(1)主函式呼叫函式時,避免裡面變數未定義,直接將呼叫函式作為引數使用(這裡值printf函式)
(2)跳出迴圈時,str指向\0;這時str-star(開始指標)就為字串長度
(3)編寫函式沒有具體字串什麼的,都是乾貨
程式:
方法二:#include <stdio.h> int my_strlen(const char *str) { //assert(str); int count=0; const char *star=str; //定義指標star,並且指向和指標str指向相同的空間 while(*str) //只要str指向的內容不為\0,就將指標向後移動,並且計數器加加 { count++; str++; } return str-star; //跳出while迴圈時,str指向最後一個字串的下一個位置(‘\0’處) } int main() { char *p="hello world"; printf("%d",my_strlen(p)); return 0; }
演算法思想:定義一個指標指向字串首地址,只要指標指向內容不為'\0',計數器加一,並且將指標向後移動,最後統計計數器數字
注意:
(1)存字串的陣列應該是char型別的
程式:
#include <stdio.h>
int main()
{
int count=0;
char arr[]="abcdef";
char *p1=arr; //指標p1中存放陣列arr首元素地址,注意應該是陣列型別的指標
while((*p1) != '\0')
{
count++;
p1++;
}
printf("%d",count);
return 0;
}
3.模擬實現strstr(strstr函式的功能是實現判斷一個字串是否是一個字串的子串)演算法思想:分別用從第一個字元開始兩個指標操作目標串和模式串,只要對應字元相等則各自加加,只要不相等了,就會模式串回到開頭,把t_old加一,再判斷,再將
t_old賦值給t_strat,每次這樣,這就保證t_old肯定是匹配全一樣時那段的開頭;若最終模式串的指標指向'\0',說明找到了這時返回那個用來記錄匹配相等時那個首地址(t_old)
注意:
(1)保證當模式串長度大於目標串時,也屬於查詢失敗情況,返回NULL
(2)注意使用t_old指標保留匹配成功時候目標串的首地址
#include <stdio.h>
#include <windows.h>
#pragma warning (disable:4996)
char *my_strstr(const char *target, const char *pattern)
{
const char *t_start=target; //再定義兩個指標操作目標字串、模式串(子串)
const char *p_start=pattern;
const char *t_old=target; //再定義一個指標用來儲存開始指標
while(*t_old)
{
t_start=t_old;//只有break跳出來到這,說明對應字元不相等,為記錄匹配相等時目標字串首地址
while(*t_start && *p_start)
{
if(*t_start==*p_start) //兩個字串中的對應字元相同,各自指標向後移動
{
t_start++;
p_start++;
}
else //對應字元不相等時,模式串應該回到首元素,目標串應該回到開始比較時的下一個字元
{
p_start=pattern;
t_old++;
break;
}
}
if(*p_start=='\0') //說明成功找到
{
return t_old;
}
if(*p_start!='\0' && *t_start=='\0') //說明目標字串長度小於模式串
{
return NULL;
}
}
return NULL; //如果來到這說明分別不是以上情況,則也是沒找到,否則return 結束本函數了
}
相關推薦
C 自己實現strcpy,strcmp,strlen,strcat等函數
求字符串長度 ret div str 實現 字符串 brush r++ 長度 /* 1. 求字符串長度函數 */ int myStrlen(char *str) { int cnt = 0; while(*str++ != ‘\0‘) { cn
C語言字串函式總結:模擬實現常用的字串類函式(strlen、strcpy、strcmp........)
總結:模擬實現常用的字串類函式(strlen、strcpy、strcmp……..) 1. strlen 2. strcpy 3. strcat 4. strstr 5. strchr 6. strcmp 7. memcpy 8. m
模擬實現strcpy、模擬實現strlen、模擬實現strstr函式
1.模擬實現strcpy(strcpy函式的功能是實現字串的複製) 方法一: 演算法思想:定義兩個指標變數dest、str,分別指向目的字串、原字串,只要str指向的內容不為\0,完成複製,返回目的字串的首地址 注意: (1)將原字串指標定義為 const型別(只讀,不可修
MongoDB分片群集(實現分片服務啟用、分片服務管理、單點故障模擬)
Opens 取數 page use chmod 組成 壓力 多個 clu MongoDB分片概述 1、什麽是分片 高數據量和吞吐量的數據庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤
call、apply、bind的區別,模擬call、apply和bind的實現
bind:bind繫結完this的指向後會返回一個新的函式體,不會被立即呼叫 call&apply:繫結完this的指向後會立即呼叫 call與apply的區別: call:第一個引數是this的指向,
【c語言】利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)
模擬實現strlen int my_strlen(const char *p) { assert(p != NULL); char *s = p; while (*p) { p++; } r
C語言:模擬實現字串函式strlen,strcpy,strcat,strcmp,strchr,strstr
什麼是C語言中的字串 字串或串(String)是由數字、字母、下劃線組成的一串字元。通常放在常量字串中或者字元陣列中。C語言中以 ‘\0’ 來作為字串的結束標記。 字元的ASCII編碼表 1.strlen 功能:字串求長 計算給定字串的(unsigned in
c#模擬網頁實現12306登陸、自動刷票、自動搶票完全篇
這一篇文章,我將從頭到尾教大家使用c#模擬網頁面登陸12306網站,自動刷票,選擇訂票人,到最後一步提交訂單。研究過HTTP協議的童鞋們都知道,我們在訪問網站時,是有兩種方式的,POST和GET方式,HTTP協議是TCP/IP的一部分,有興趣的可以使用Socket通訊可
【c++】模擬實現迴圈佇列 三種方法(標識、浪費一個空間、計數器)
什麼是迴圈佇列? 為充分利用向量空間,克服”假溢位“現象的方法:將向量空間想象為一個首尾相接的圓環,並稱這種向量為迴圈向量。儲存在其中的佇列稱為迴圈佇列(Circular Queue)。 假象成如圖: 但實際上儲存空間還是一段連續的空間。 空佇列: 當有元素入隊時:
模擬實現strcpy函數
c++ span printf style use while strcpy r++ abc 模擬實現strcpy函數 a、代碼簡練的 1 #include<stdio.h> 2 #include<assert.h> 3 4 //模擬實現
模擬實現strcpy函式功能(優化改進)
strcpy函式,字串拷貝函式,傳入兩個引數,將第二個引數的值拷貝到第一個中去。 首先,給出一個普通的程式碼: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> void
模擬實現strcpy和strcat的函式實現
#include<stdio.h> #include<Windows.h> #include<assert.h> char* my_strcpy(char* dest, const char* src) { char *ret1 = dest;//記錄目標字
No.25 經典筆試題(二):模擬實現strcpy,strcat,strcmp,strstr,memcpy
直接上程式碼: 1. //模擬實現strcpy #include <stdio.h> #include <assert.h> char* my_strcpy(char* dest, const char* src) { char* ret = dest ;
模擬實現strcpy 和strcat
模擬實現strcpy : char *My_strcpy(char *dest, const char *src) { char *ret = dest; assert(NULL != dest); assert(NULL != src); while((*dest++ = *src++
c語言模擬實現strcpy
//模擬實現strcpy 概念: //strcpy(str1,st2)將陣列str2的值複製到陣列str1 解題思路:整體比較簡單 1> 將數組裡的值一個個拷貝到另個數組;
【C語言】模擬實現strcpy strcat strstr strcmp
模擬實現strcpy(字串拷貝) 這道題,是將原字串的內容拷貝到目標字串中去,一個字元一個字元的拷貝直到遇到 ‘\0’ ,將它也拷貝過去後停止。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include&
string庫之模擬實現strcpy與strncpy
原型: C庫string.h中strcpy函式 描述: C 庫函式 char *strcpy(char *dest, const char *src) 把 src 所指向的字串複製到 dest。 引數: dest指向用於儲存複製內容的目標陣列。s
[c語言]codeday15找出陣列中出現一次的兩個值以及喝汽水模擬實現strcpy和
1.一個數組中只有兩個數字是出現一次, 其他所有數字都出現了兩次。 找出這兩個數字,程式設計實現 #include<stdio.h> void find(int arr[],int len,int *m,int *n) { int s = 0;
【機器學習算法-python實現】PCA 主成分分析、降維
pre gre text iss 主成分分析 int 找到 nts 導入 1.背景 PCA(Principal Component Analysis),PAC的作用主要是減少數據集的維度,然後挑選出基本的特征。 PCA的主要思想是移動坐標軸,找
學習筆記TF016:CNN實現、數據集、TFRecord、加載圖像、模型、訓練、調試
quest oba lose 神經元 byte 足夠 jpg eight 值轉換 AlexNet(Alex Krizhevsky,ILSVRC2012冠軍)適合做圖像分類。層自左向右、自上向下讀取,關聯層分為一組,高度、寬度減小,深度增加。深度增加減少網絡計算量。 訓練模