将字符串添加到特定位置

Add string to specific position

我是C的新手,我有一个基本的编码规则,如果字符串中有Z,我们添加另一个Z,如果没有Z,就重复

示例

输入:STZCK -> 输出:STZZCK

我设法添加了另一个 Z,但就在字​​符串的末尾,我必须在找到的 Z 之后添加。

我试过了

char * encoding (char * str){
    
    int size = strlen(str);

    for(int i=0; i<size; i++){
    
        if(str[i] == 'Z'){

            char ch = 'Z';
            strncat(str, &ch, 1);

        }
        else if(str[i] != 'Z'){
            str[i] = str[i];
        }
    }
    
    return str;
}

提前致谢

您需要澄清您的函数是否接收到一个缓冲区,其中包含足够 space 用于输出字符串,或者您的函数是否需要动态分配内存。

第一种情况你可以这样做:

#include <stdio.h>

void encode(char *d, const char *s)
{
    do {
        *d++ = *s;
        if (*s == 'Z') {
            *d++ = *s;
        }
    } while (*s++ != 0);
}

int main(void) {
    char *src[] = {"STZCK", "HELLO", "ZZ", "", NULL};
    char dst[256];
    
    for (char **s = src; *s != NULL; ++s) {
        encode(dst, *s);
        printf("%s -> %s\n", *s, dst);
    }
    
    return 0;
}

我会这样做

 char* encoding(char* str) {
    int len = strlen(str);

    // count Z to see how much bigger the result will be 
    int countZ = 0;
    for (int i = 0; i < len; i++) {
        if (str[i] == 'Z') countZ++;
    }
    // make return string large enough
    char* retStr = malloc(len + countZ + 1);

    // copy old to new with added Zs  
    int retOff = 0;
    for (int i = 0; i < len; i++) {
        retStr[retOff++] = str[i];
        if (str[i] == 'Z') retStr[retOff++] = 'Z';
    }
    retStr[retOff] = 0;
    return retStr;
}