天天看點

15-自己寫字元串庫函數

(1)求字元串長度。

(2)實作strcmp函數。

(3)在一個字元串中找到可能的最長的子字元串,該子字元串是由同一字元組成的。

代碼1(自己寫的):

#include <iostream>
#include <cstring>
#include <stdio.h>
const int maxn = 100;


using namespace std;


//(1)求字元串長度。int mylength(char *str)
int mylength(char *str)
{
    int add = 0;
    while(str[add] != '\0')
    {
        add++;
    }
    return add;
}

/*
int main()
{
    int x;
    char w[100];
    gets(w);
    x = mylength(w);
    printf("string number is %d",x);
    return 0;
}
*/

/*
//(2)實作strcmp函數。int mystrcmp(char* str1, char* str2)
int mystrcmp(char *str1,char *str2)
{
    while(*str1 != '\0' && *str2 != '\0')
    {
        if(*str1 == *str2)
        {
            str1++;
            str2++;
        }
        else if(*str1 > *str2)
        {
            return 1;
        }
        else if(*str1 < *str2)
        {
            return -1;
        }
    }
    if(*str1 == '\0' && *str2 == '\0')
        return 0;
    if(*str1 == '\0' && *str2 != '\0')
        return -1;
    if(*str1 != '\0' && *str2 == '\0')
        return 1;
}

int main()
{
    char a[maxn],b[maxn];
    gets(a);
    gets(b);
    printf("%d\n",mystrcmp(a,b));
}
*/


//(3) 在一個字元串中找到可能的最長的子字元串,該子字元串是由同一字元組成的。int myChildString(char *p)
int myChildString(char *p)
{
    int cot = 1,i = 1;
    int most = 1;       //儲存最大長度

    while(i <= mylength(p))
    {
        while((i <= mylength(p)) && (p[i] == p[i-1]))
        {
            cot++;
            i++;
        }
        if(cot > most)
        {
            most = cot;
            cot = 1;
        }
        i++;
    }
    return most;

}

int main()
{
    //scanf("%s",num);
    char num[maxn]="aabbb";
    printf("the most length is %d",myChildString(num));
}


           

代碼2(西交無盡):

int mylength(char *str){
    char *q = str;
    int length = 0;
    while(*q != '\0'){
        length++;
        q++;
    }
    return length;
}

int myStrcmp(char *str1,char *str2){
    if(str1 == NULL || str2 == NULL){
        return -2;
    }

    //循環去除相同字元
    //str1 = "aaaa" str2 = "aabb"
    while(*str2 == *str1 && *str2 != '\0' && *str1 != '\0'){
        str1++;
        str2++;
    }

    if(*str1 == *str2) return 0;
    else if(*str1 > *str2) return 1;
    else return -1;
}

int myChildString(char *p){
   char *str = p;
   int L = mylength(str);
   int Stringlen = 1,maxlen = 1,i = 0;

   while(*(str+i) != '\0'){
        if(*(str+i) == *(str+i+1) && (i+1 < L)){
            Stringlen++;
        }

        else {
            if(Stringlen > maxlen) maxlen = Stringlen;
            Stringlen = 1;
        }
        i++;
   }
   return maxlen;
}
           

(感謝西交無盡學長提供以上題目練習)