Разделите первый и последний символ от струны до

Другое место для поиска информации о производительности является анализом Производительности Hugo Vidal Teixeira страницы селекторов.

http://www.componenthouse.com/article-19

Это дает хороший шанс вниз скоростей для селектора идентификатором, селектора классом и селектора, снабжающего префиксом имя тега.

самые быстрые селекторы идентификатором был: $ (" #id")

самый быстрый селектор классом был: $ ('tag.class')

Настолько снабжающий префиксом тегом только помог при выборе классом!

26
задан Yu Hao 15 March 2014 в 06:26
поделиться

3 ответа

Чтобы «удалить» 1-й символ, укажите на второй символ:

char mystr[] = "Nmy stringP";
char *p = mystr;
p++; /* 'N' is not in `p` */

Чтобы удалить последний символ, замените его на '\ 0'

p[strlen(p)-1] = 0; /* 'P' is not in `p` (and it isn't in `mystr` either) */
55
ответ дан 28 November 2019 в 06:31
поделиться

Другой вариант, опять же, предполагая, что «редактировать» означает, что вы хотите изменить на месте:

void topntail(char *str) {
    size_t len = strlen(str);
    assert(len >= 2); // or whatever you want to do with short strings
    memmove(str, str+1, len-2);
    str[len-2] = 0;
}

Это изменяет строку на месте, не генерируя новый адрес, как это делает решение pmg. Не то чтобы с ответом pmg что-то не так, но в некоторых случаях это не то, что вам нужно.

11
ответ дан 28 November 2019 в 06:31
поделиться

Самый эффективный способ:

//Note destroys the original string by removing it's last char
// Do not pass in a string literal.
char * getAllButFirstAndLast(char *input)
{
  int len = strlen(input); 
  if(len > 0)
    input++;//Go past the first char
  if(len > 1)
    input[len - 2] = '\0';//Replace the last char with a null termination
  return input;
}


//...
//Call it like so
char str[512];
strcpy(str, "hello world");
char *pMod = getAllButFirstAndLast(str);

Самый безопасный способ:

void getAllButFirstAndLast(const char *input, char *output)
{
  int len = strlen(input);
  if(len > 0)
    strcpy(output, ++input);
  if(len > 1)
    output[len - 2] = '\0';
}


//...
//Call it like so
char mod[512];
getAllButFirstAndLast("hello world", mod);

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

1
ответ дан 28 November 2019 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: