Редактирование на основе удаления 1-го символа '_'
вместо всех '_'
Самый простой подход к удалению начального '_'
- просто сдвинуть все символы вниз на 1 вstring
, если первый символ - '_'
.
Вы можете использовать такие функции, как memmove
из string.h
, чтобы сделать то же самое. (в одном вызове функции) Однако цикл такой же простой.
Простая функция, использующая метод цикла, может быть:
void rm_1st_underscore (char *string)
{
int i = 1; /* set index to 1 (2nd char in string) */
if (*string != '_') /* if 1st char not '_', just return */
return;
do /* loop over each char in string */
string[i-1] = string[i]; /* shift chars back by 1 in string */
while (string[i++] != 0); /* (note: causes '\0' to copy) */
}
Краткий пример:
#include <stdio.h>
void rm_1st_underscore (char *string)
{
int i = 1; /* set index to 1 (2nd char in string) */
if (*string != '_') /* if 1st char not '_', just return */
return;
do /* loop over each char in string */
string[i-1] = string[i]; /* shift chars back by 1 in string */
while (string[i++] != 0); /* (note: causes '\0' to copy) */
}
int main (void) {
char str[] = "_I_have_1_dog.dat";
rm_1st_underscore (str);
puts (str);
}
Пример использования / Вывод
$ ./bin/rmunderscore
I_have_1_dog.dat
Посмотрите вещи и дайте мне знать, если у вас все еще есть вопросы. Если вам нужна помощь, попробуйте с memmove
, дайте мне знать, и я приведу другой пример.
Использование memmove
Поскольку мы просто удаляем первый'_'
вместо всех, использование memmove
делает его тривиальным. Просто включите string.h
и получите длину string
, а затем вызовите memmove
, копируя со второго символа в string
обратно на первый, например,
...
#include <string.h>
void rm_1st_underscore (char *string)
{
size_t len = strlen (string);
memmove (string, string + 1, len);
}
...
(вывод такой же)