Добавить символ в строку - язык NXC

Я хочу написать себе функцию, похожую на PHP str_repeat, Я хочу, чтобы эта функция добавляла указанное количество символов в конце строки.

Это код, который не работает (string argument 2 expected!)

void chrrepeat(const char &ch, string &target, const int &count) {
  for(int i=0; i<count; i++)
    strcat(target, ch);
}

2 ответа

Я точно не знаю, что это за язык (C++?), Но вы, кажется, передаете символ strcat() вместо строки с нулевым символом в конце. Это тонкая разница, но strcat будет с радостью получать доступ к другим недействительным позициям в памяти, пока не будет найден нулевой байт

Вместо того, чтобы использовать strcat, что неэффективно, потому что он всегда должен искать до конца строки, вы можете сделать пользовательскую функцию только для этого.

Вот моя реализация в C:

void chrrepeat(const char ch, char *target, int repeat) {
    if (repeat == 0) {
        *target = '\0';
        return;
    }
    for (; *target; target++);
    while (repeat--)
        *target++ = ch;
    *target = '\0';
}

Я сделал это вернуть пустую строку для случая, когда repeat == 0 потому что так работает в PHP, согласно онлайн-руководству.

Этот код предполагает, что в целевой строке достаточно места для повторения. Подпись функции должна быть достаточно понятной, но вот пример кода, который ее использует:

int main(void) {
    char test[32] = "Hello, world";
    chrrepeat('!', test, 7);
    printf("%s\n", test);
    return 0;
}

Это печатает:

Hello, world!!!!!!!

Преобразовать символ в строку.

void chrrepeat(char ch, string &target, const int count) {
  string help = "x"; // x will be replaced
  help[0] = ch;
  for(int i=0; i<count; i++)
    strcat(target, help);
}
Другие вопросы по тегам