基础操作

  1. my_strlen: 编写程序,计算给定字符串的长度(不使用strlen函数)。

    int my_strlen(char *str){
        int count = 0;
        while(*str){
            count++;
            str++;
        }
        return count;
    }
    
  2. my_strcpy: 实现字符串复制功能(不使用strcpy函数)。

    char *my_strcpy(char *str1, char *str2){
        char *p = str1;
        while(*str2){
            *p++ = *str2++;
        }
        return str1;
    }
    
  3. my_strcat: 编写程序,将两个字符串连接起来(不使用strcat函数)。

    char *my_strcat(char *str1, char *str2){
        char *p = str1;
        while(*p){
            p++;
        }
        while(*str2){
            *p++ = *str2++;
        }
        *p = 0;
        return str1;
    }
    
  4. my_strcmp: 实现字符串比较功能(不使用strcmp函数)。

    int my_strcmp(char *str1, char *str2){
        while(*str1 == *str2 && *str1 && *str2){
            if(*str1 > *str2){
                return 1;
            }
            if(*str1 < *str2){
                return -1;
            }
            str1++;
            str2++;
        }
        if(*str1 == *str2){
            return 0;
        }else if(*str1){
            return 1;
        }else{
            return -1;
        }
    }
    
  5. to_uppercase: 编写函数,将字符串中的所有字符转换为大写形式。

    char *to_uppercase(char *str){
        char *p = str;
        while(*p){
            if(*p >= 'a' && *p <= 'z'){
                *p -= 32;
            }
            p++;
        }
        return str;
    }
    

查找与统计

  1. count_char: 编写程序,统计字符串中某个特定字符出现的次数。

    int count_char(char *str, char target){
        int count = 0;
        while(*str){
            if(*str == target){
                count++;
            }
            str++;
        }
        return count;
    }
    
  2. find_first_digit: 查找字符串中第一个出现的数字字符并返回其位置。

    int find_first_digit(char *str){
        int i = 0;
        while(*str){
            if(*str >= '0' && *str <= '9'){
                return i+1;	
            }
            str++;
            i++;
        }
        return -1;
    }
    
  3. count_words: 统计字符串中单词的个数(单词间用空格分隔)。

    int count_words(char *str){
        int inword = 0, count = 0;
        while(*str){
            if(inword&&(*str == ' ' || *str == '.' || *str == '?' || *str == '!' || *(str+1) == 0)){
                inword = 0;
                count++;
            }
            if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z'){
                inword = 1;
            }
            str++;
        }
        return count;
    }
    
  4. find_longest_word: 找出字符串中最长的单词并输出。

    void find_longest_word(char *str){
        int inword = 0, count = 0, max_count = 0;
        char *p;
        while(*str){
            if(inword&&(*str == ' ' || *str == '.' || *str == '?' || *str == '!' || *(str+1) == 0)){
                inword = 0;
                if(count > max_count){
                    max_count = count;
                    p = str-count;
                }
            }
            if(*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z'){
                if(!inword){
                    count = 0;
                }
                inword = 1;
            }
            count++;
            str++;
        }
        
        while(max_count){
            putchar(*p++);
            max_count--;
        }
        printf("\n");
    }
    
  5. is_palindrome: 编写程序,检查字符串是否是回文(正读反读都相同)。

    int is_palindrome(char *str){
        char *p, *q;
        p = q = str;
        while(*q) q++;
        q--;
        while(p < q){
            if(*p != *q){
                return 0;
            }
            p++;
            q--; 
        }
        return 1;
    }
    

转换与修改

  1. swap_case: 将字符串中的大小写字母互换(大写转小写,小写转大写)。

    char *swap_case(char *str){
        char *p = str;
        while(*p){
            if(*p >= 'a' && *p <= 'z'){
                *p -=32;
            }else if(*p >= 'A' && *p <= 'Z'){
                *p +=32;
            }
            p++;
        }
        
        return str;
    }
    
  2. remove_spaces: 删除字符串中所有的空格字符。

    char *remove_spaces(char *str){
        char *p, *q;
        p = q = str;
        while(*q){
            if(*q != ' '){
                *p++ = *q;
            }
            q++;
        }
        *p = 0;
        return str;
    }
    
  3. replace_digits: 将字符串中的数字字符替换为'*'。

    char *replace_digits(char *str){
        char *p = str;
        while(*p){
            if(*p >= '0' && *p <= '9'){
                *p = '*';
            }
            p++;
        }
        return str;
    }
    
  4. reverse_string: 编写程序,反转字符串(不使用库函数)。

    char *replace_digits(char *str){
        char *p = str;
        while(*p){
            if(*p >= '0' && *p <= '9'){
                *p = '*';
            }
            p++;
        }
        return str;
    }
    
  5. remove_vowels: 将字符串中的所有元音字母(a,e,i,o,u)删除。

    char *remove_vowels(char *str){
        char *q, *p;
        p = q = str;
        while(*q){
            switch(*q){
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':break;
                default:*p++ = *q;
            }
            q++;
        }
        *p = 0;
        return str;
    }
    

高级操作

  1. insert_string: 实现字符串的插入操作:在指定位置插入另一个字符串。

    char *insert_string(char *str1, char *str2, int index){
        char *p = str1+strlen(str1)-1; 
        while(p >= (str1+index-1)){
            *(p+strlen(str2)) = *p;
            p--;
        }
        p = str1+index-1;
        while(*str2){
            *p++ = *str2++;
        }
        return str1;
    }
    
  2. delete_substring: 编写程序,从字符串中删除指定的子字符串。

    char *delete_substring(char *str1, char *str2){
        char *p, *q, *t;
        p = q = str1;
        while(*q){
            if(*q == *str2){
                t = str2;
                while(*++q == *++t && *t);
                if(*t == 0){
                    continue;
                    printf("#\n");
                }else{
                    q-=t-str2;
                }
            }
            *p++ = *q++;
        }
        *p = 0;
        return str1;
    }
    
  3. simple_encrypt: 实现简单的字符串加密:将每个字符的ASCII码值加1。

    char *simple_encrypt(char *str){
        char *p = str;
        while(*p){
            *p += 1;
            p++;
        }
        return str;
    }
    
  4. longest_common_substring: 编写程序,找出两个字符串中的最长公共子串。

    void longest_common_substring(char *str1, char *str2){
        int i, j, k, l, max_len, start;
        for(i=0;i<strlen(str1)-1;i++){
            for(j=i+1;j<strlen(str1);j++){
                int cur_len = j-i+1;
                for(k=0;k<=strlen(str2)-cur_len && cur_len <=strlen(str2);k++){
                    int match = 1;
                    for(l=0;l<cur_len;l++){
                        if(str1[i+l] != str2[k+l]){
                            match = 0;
                        }
                    }
                    if(match && cur_len > max_len){
                        max_len = cur_len;
                        start = i;
                    }
                }
            }
        }
        if(max_len > 0){
            for(i=start;i<start+max_len;i++){
                putchar(str1[i]);
            }
            printf("\n");
        }
    }
    
  5. sort_string: 实现字符串的排序(按ASCII码值升序排列)。

    char *sort_string(char *str){
        int i, j;
        char temp;
        for(i=0;i<strlen(str)-1;i++){
            for(j=0;j<strlen(str)-1-i;j++){
                if(str[j] > str[j+1]){
                    temp = str[j];
                    str[j] = str[j+1];
                    str[j+1] = temp;
                }
            }
        }
        return str;
    }