• C语言字符串操作函数实现


    1、字符串反转 – strRev

    void strRev(char *str)
    {
        assert(NULL != str);
     
        int length=strlen(str);
        char *end=str+length-1;
    
        while(end > str)
        {
            *str=(*str)^(*end);
            *end=(*str)^(*end);
            *str=(*str)^(*end);
    
            end--;
            str++;
        }
    }

    2、字符串复制 – strcpy

    char *strcpy(char *strDest, const char *strStr)
    {
        assert((NULL != strDest) && (NULL != strStr));
    
        char *Dest=strDest;
    
        while((*Dest++)=(*strStr++))
        {}
    
        return strDest;
    }

    3、字符串拼接 –strcat

    char *strcat(char *strDest, const char *strStr)
    {
        assert((NULL != strDest) && (NULL != strStr));
    
        int length=strlen(strDest);
    
        char *Dest=strDest+length;
    
        while((*Dest++)=(*strStr++))
        {}
    
        return strDest;
    }

    4、字符串比较 –strcmp

    int strcmp(const char *strDest, const char *strStr)
    {
        assert((NULL != strDest) && (NULL != strStr));
    
        while(0==(*strDest - *strStr) && *strDest )
        {
            strDest++;
            strStr++;
        }
    
        if(*strDest > *strStr)
            return 1;
        else if(*strDest < *strStr)
            return -1;
        else
            return 0;
    }

    5、字符串长度 –strlen

    int strlen(const char *strStr)
    {
        assert(NULL != strStr);
    
        int length = 0;
    
        while('' != *strStr)
        {
            length++;
            strStr++;
        }
    
        return length;
    }

    6、字符串转数字 –atoi

    int atoi(const char *strStr)
    {
        assert(NULL != strStr);
    
        int minus = 0;
        int begin = 0;
        int sum = 0;
    
        while('' !=*strStr)
        {
            if(0==begin && (isdigit(*strStr) || '+'==*strStr || '-'==*strStr))
            {
                begin = 1;
    
                if('-'==*strStr)
                {
                    minus = 1;
                    strStr++;
                    continue;
                }
            }
            else if(!isdigit(*strStr))
            {
                printf("format is wrong !
    ");
                exit(1);
            }
    
            if(1==begin)
            {
                sum = sum*10 + (*strStr-'0');
            }
    
            strStr++;
        }
    
        return minus ? (-sum):(sum);
    }

    7、数字转字符串 –atoi

    char *itoa(int num)
    {
        int temp,i,j;
        char array[10];
        static char strDest[10];
    
        for(temp = num,i=0; i<10 && temp ;i++)
        {
            array[i]=temp%10+'0';
            temp/=10;
        }
    
    
        for(i=i-1,j=0 ; i>=0 && j<10; i--,j++)
        {
            strDest[j]=array[i];
        }
        strDest[j]='';
    
        return strDest;
    }

    8、计算字符串中元音字符的个数

    #include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>
    #include<ctype.h>
    
    int isVowel(char letter)
    {
        switch(toupper(letter))
        {
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                return 1;
            default:
                return 0;
        }
    }
    
    int countVowel(const char * strStr)
    {
        assert(NULL != strStr);
    
        int count=0;
    
        while('' !=*strStr++)
        {
            if(isVowel(*strStr))
                count++;
        }
    
        return count;
    }
    
    int main()
    {
        char a[10]="hwlulr";
    
        printf("%d
    ",countVowel(a));
    
        return 0;
    }

    9、判断一个字符串是否是回文

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<assert.h>
    #include<ctype.h>
    
    int isEqual(char a,char b)
    {
        if(a==b)
            return 1;
    
        return 0;
    }
    
    int isPalindrome(const char * strStr)
    {
        assert(NULL != strStr);
    
        int length=strlen(strStr);
        int i,j;
    
        for(i=0,j=length-1; i<j ; i++,j--)
        {
            /*跳过空格和符号*/
            while(' '== *(strStr+i) || !isalpha(*(strStr+i)))
                i++;
            while(' '== *(strStr+j) || !isalpha(*(strStr+j)))
                j--;
    
            if(0==isEqual(*(strStr+i),*(strStr+j)))
                return 0;
        }
    
        return 1;
    }
    
    int main()
    {
        char a[10]="heo o, e h";
    
        printf("%s
    ",isPalindrome(a) ? "is Palindrome" : "is not Palindrome");
    
        return 0;
    }
  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/274914765qq/p/4376954.html
Copyright © 2020-2023  润新知