Функция поставить '' после n символов - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно написать функцию, которую каждой n позиции присваивает пустой символ. Теперь у меня есть что-то подобное, но это не работает так, как я хочу)

void strEscape(char* string, int length,int param) {
    int count = 0; // tried to count how many times , inserted ' '
    for (int i = 1; i + count < length; i++) {
        if (i%param==0) { // checking if reached n position
            length++;
            string = (char*)realloc(string, (length+1) * sizeof(char));
            for (int j = length; j > i; j--) {
                string[j] = string[j-1]; //swapping elements
            }

            string[i+count] = ' '; 
            string[length] = '\0';
            count++;
        }
    }

}

Например, давайте возьмем, что я хочу поставить '' после 3 символов, поэтому param = 3;

И вот результаты, что у меня сейчас

Ввод-> Вывод:

abca-> ab c a

abcabca-> ab c ab c a

abcabcabca -> ab c ab c abb aa -> здесь что-то идет не так

И у меня есть (HEAP [Source.exe]: указан неверный адрес для RtlValidateHeap), если строка содержит 10 и более элементов

1 Ответ

0 голосов
/ 01 апреля 2020

Вот как вы можете это сделать.

void strEscape(char** pstr, int len, int param) {

    if(param <= 0 || param >= len) {
        return;
    }
    // required length of new string
    int new_len = len + (len-1)/param;

    // allocate memory for new string
    char* new_str = malloc(new_len * sizeof(char) + 1);

    int i = 0, j = 0;
    while(j < new_len) {
        if(i > 0 && i%param == 0) {
            new_str[j++] = ' ';
        }
        new_str[j] = (*pstr)[i];
        i++;
        j++;
    }
    new_str[j] = '\0';

    // free old string
    free(*pstr);
    // assign pstr to point to new string
    *pstr = new_str;
}

int main() {
    char* str = "abcdabcdabcd";
    // pstr is pointer to string str
    char** pstr = &str;
    strEscape(pstr, 12, 3);
    printf("%s\n", str);
    return 0;
}
...