Untitled

 avatar
unknown
c_cpp
2 years ago
2.0 kB
6
Indexable
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void add(char**, int, char*);
void del(char**, int, int);
void swap(char**, int, int);
void longest(char**, int);
void all(char**, int);

int main(){

    int n, m;
    scanf("%d %d ", &n, &m);

    char** st = (char**)malloc(sizeof(char*) * 100 + sizeof(char) * 100 * 100005);
    char* ptr = (char*)(st + 100);
    for(int i=0; i<100; i++){
        st[i] = ptr + i*1005;
    }
    for(int i=0; i<m; i++){

        char op[10], s[105];
        int x, y, k;
        scanf("%s", op);
        switch(op[1]){
            case 'd':   // add
                scanf("%d %s", &x, s);
                add(st, x-1, s);
                // printf("st: %d %s\n", x, s);
                break;
            case 'e':   // delete
                scanf("%d %d", &x, &k);
                del(st, x-1, k);
                // printf("del st: %d %d\n", x, k);
                break;
            case 'w':   // swap
                scanf("%d %d\n", &x, &y);
                swap(st, x-1, y-1);
                // printf("swap st: %d %d\n", x, y);
                break;
            case 'o':   // longest
                longest(st, n);
                break;
            case 'l':   // all
                all(st, n);
                break;
        }   
    }

    return 0;
}

void add(char** st, int n, char* s){
    strcat(st[n], s);
}

void del(char** st, int n, int k){
    
    int len = strlen(st[n]);
    for(int i=len-1; i>=len-k; i--)
        st[n][i] = 0;
}

void swap(char** st, int a, int b){
    char* tmp = st[a];
    st[a] = st[b];
    st[b] = tmp;
}

void longest(char** st, int n){
    
    int max = 0, maxi = 0;
    for(int i=0; i<n; i++){
        if(max < strlen(st[i])) max = strlen(st[i]), maxi = i;
    }

    printf("%d %s\n", strlen(st[maxi]), st[maxi]);
}

void all(char** st, int n){
    for(int i=0; i<n; i++){
        puts(st[i]);
    }
}
Editor is loading...