C语言强化——字符串(2)

1.将包含字符数字的字符串分开,使得分开后的字符串前一部分是数字后一部分是字母。例
如“h1ell2o3” -> “123hello”

#include<stdio.h>
#include<ctype.h>
#include<string.h>

void swap(char *a, char *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    char str[10];
    while (scanf("%s", str) != EOF) {
        char ans[100];
        int len = strlen(str), num = 0;
        for (int i = 0;i < len;++i) {
            if (isdigit(str[i])) {
                ans[num++] = str[i];
            }
        }
        for (int i = 0;i < len;++i) {
            if (isalpha(str[i])) {
                ans[num++] = str[i];
            }
        }
        ans[num++] = '\0';
        printf("%s\n", ans);
        memset(str, 0, sizeof(str));
    }
    
    return 0;
}

2.将 字 符 串 中 的 空 格 替 换 成 “%020” , 例 如 “hello world how ”->
“hello%020%020%020world%020%020%020how%020%020%020%020”

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>

void replace(char *c) {
    char *temp = (char*)malloc(strlen(c));
    strcpy(temp, c);
    int i = 0;
    while (*temp != '\0') {
        if (*temp == ' ') {
            c[i++] = '%';
            c[i++] = '0';
            c[i++] = '2';
            c[i++] = '0';
        }
        else {
            c[i++] = *temp;
        }
        temp++;
    }
    c[i] = '\0';
    printf("%s\n", c);
}

int main() {
    char str[100];
    while (gets(str)) {
        replace(str);
    }
    return 0;
}

3.删除字符串中指定的字符。 例如 “abcdaefaghiagkl“ 删除‘a’,以后: “bcdefghigkl”

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>

void replace(char *c,const char a) {
    char *temp = (char*)malloc(strlen(c));
    strcpy(temp, c);
    int i = 0;
    while (*temp != '\0') {
        if (*temp != a) {
            c[i++] = *temp;
        }
        temp++;
    }
    c[i] = '\0';
    printf("%s\n", c);
}

int main() {
    char str[100], a;
    while (scanf("%s %c", &str, &a) != EOF) {
        replace(str, a);
    }
    return 0;
}

4.删除一个数组中重复的元素。例如
1 ,2, 2,2,3,3,3,4,4,5,5,5,6,6,6 -> 1,2,3,4,5,6

#include<stdio.h>
#include<string.h>

int main() {
    int ori[] = { 1 ,2, 2,2,3,3,3,4,4,5,5,5,6,6,6 };
    int hashTable[100] = { 0 }, ans[20] = { 0 };
    for (int i = 0;i < sizeof(ori) / sizeof(int);++i) {
        ++hashTable[ori[i]];
    }
    int num = 0;
    for (int i = 0;i < sizeof(ori) / sizeof(int);++i) {
        if (hashTable[ori[i]] == 1) {
            ans[num++] = ori[i];
        }
        else if(hashTable[ori[i]] > 1 ){
            ans[num++] = ori[i];
            hashTable[ori[i]] = 0;
        }
    }
    for (int i = 0;i < num;++i) {
        printf("%d ", ans[i]);
    }
    printf("\n");
    return 0;
}

5.将 字 符 串 中 的 相 邻 的 多 余 空 格 去 掉 , 例 如 (空 格 用 下 划 线 表
示): ” hello world how are you ” ->”hello world how are you”

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void replace(char str[]) {
    int len = strlen(str), i = 0, num = 0;
    char *t = (char *)malloc(len);
    //去掉首部空格
    while (str[i] == ' ') i++;
    //去掉中间部分
    for (;i < len;i++) {
        if (str[i] == ' ') {
            t[num++] = ' ';
            while (str[i+1] == ' ') i++;
        }
        else {
            t[num++] = str[i];
        }
    }
    //去掉结尾空格
    while (t[num] == ' ') {
        --num;
    }
    t[num-1] = '\0';
    printf("%s\n", t);
}

int main() {
    char str[100];
    while (gets(str)) {
        replace(str);
    }
    return 0;
}

6.求一个字符串数组的最大值和次大值 void big(char *arr[],int size ,char big1,char big2)

#include<stdio.h>
#include<string.h>

void big(char *arr[], int size, char** big1, char** big2) {
    for (int i = 1;i < size;i++) {
        if (strcmp(*big1, arr[i]) < 0) {
            *big2 = *big1;
            *big1 = arr[i];
        }
    }
    printf("Result: %s %s\n", *big1, *big2);
}

int main() {
    char *str[] = { "egg","apple","animal","zig-zag","car","brown" };
    char *big1 = str[0],  *big2 = str[0];
    big(str, 6, &big1, &big2);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mered1th/p/10628338.html