两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.字符串連接操作

顧名思義,即將一個字符串鏈接到另一個字符串的尾部,我們可以創(chuàng)建一個函數(shù),同時利用指針,分別先后全部遍歷兩個字符串,將其中一個字符串的結(jié)束符’\0’去除并鏈接另一個字符串直到遇到結(jié)束符’\0’即可,函數(shù)實現(xiàn)為:

#include<stdio.h>
 
char *_strcat(char dest[],char src[]){
    char * ret = dest;
    while(*dest!='\0'){dest++;}
    //將src內(nèi)容復(fù)制在dest之后
    while(*src){
        *dest++ = *src++;
    }
    //在dest后面追加\0
    *dest = '\0';
    return ret;
}
 
int main(){
    char str[] = "Hello My DotCpp.com";
    char fixstr[] = "Welcome ";
    _strcat(fixstr,str);
 
    printf("%s",fixstr);
 
    return 0;
}

輸出Welcome Hello My DotCpp.com


2. 字符串比較操作

顧名思義,對兩個字符字符字符串進(jìn)行比較,常用于確認(rèn)兩字符串是否完全相等,部分高級用法可以擴(kuò)展到利用大小差別進(jìn)行容器的算法設(shè)計等,比較操作的內(nèi)容就是對兩個字符串進(jìn)行比較,兩個字符串完全相等時返回0,第一個字符串大于第二個字符串時返回一個正值,否則返回負(fù)值,實現(xiàn)代碼為:

注意比較的時候要使用unsigned char而不要直接使用char,那是因為計算機(jī)編程語言中擴(kuò)展了char的字符位,使字符位也擁有了含義,因此建議在核心的比較時使用unsigned char的類型。

#include<stdio.h>
 
int _strcmp (char  *  src, char  *  dst)   {   
    int  ret  =  0  ;   
    while(  !(ret  =  *(unsigned  char  *)src  -  *(unsigned  char  *)dst)  &&  *dst)   //兩個內(nèi)容相減,完全相等則會得到值 0,取反即為相等
        ++src,  ++dst;   
    if  (  ret  <  0  )   
        ret  =  -1  ;   
    else  if  (  ret  >  0  )   
        ret  =  1  ;   
    return ret;   
} 
 
int main(){
    char str[] = "Hello My DotCpp.com";
    char fixstr[] = "Welcome ";
    int ans = _strcmp(fixstr,str);
 
    printf("%d",ans);
 
    return 0;
}

輸出 1


3. 暴力匹配法

這并不是最理想的算法,但卻這是字符串匹配算法中最容易理解的算法,算法核心為給定一個主串T和一個模式串P,求問是否P是屬于T的一個字串,如:”Hello”中”llo”就是其中的一個字串,對于暴力匹配算法而言,我們可以利用兩層循環(huán)進(jìn)行比對,第一層循環(huán)中找尋T字符串中的每一個字符,第二層循環(huán)找尋的是每一個P字符,進(jìn)入第二層循環(huán)時T字符串也會跟著進(jìn)行字符前進(jìn),如果發(fā)生不匹配則產(chǎn)生一個回溯回到第一層循環(huán)的進(jìn)入字符的下一個字符。

代碼示例如下: 

#include<iostream>
#include<cstring>
 
using namespace std;
 
bool isBF(char str1[],char str2[]){
    bool flag=false;
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    for(int i=0;i<len1;i++){
        for(int j=0;j<len2;j++){
            int pos=i;
            if( str1[pos++] != str2[j]){
                break;
            }else{
                if(j=len2-1)
                    flag=true;
            }
        }
    }
    return flag;
}
 
int main(){
    char str1[] = "HI this is my lesson.";
    char str2[] = "is";
    cout<<isBF(str1,str2)<<endl;
    return 0;
}

輸出1

 

綜上假設(shè)字符串T的長度為n,字符串P的長度為m,則整個算法的時間復(fù)雜度為O( n * m ),而對于一個復(fù)雜的現(xiàn)實情況而言 n >> m >> 2 (即n遠(yuǎn)遠(yuǎn)大于m,m遠(yuǎn)遠(yuǎn)大于常數(shù)),這樣的計算計算機(jī)的負(fù)擔(dān)很重。


點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)