c удалить первый символ массива - PullRequest
6 голосов
/ 19 апреля 2011

У меня есть строка:

str1 = "abcabcabc";

Как я могу удалить первый символ? Я хотел бы, чтобы конечный результат был:

str1 = "bcabcabc";

Ответы [ 6 ]

18 голосов
/ 19 апреля 2011

Если у вас есть символьный указатель на строку вроде:

char *s = "This is my string";

, тогда вы можете просто сделать s++.

Если у вас есть массив символов , Лучше всего иметь указатель на этот массив:

char s[] = "This is my string";
char *ps = s;

, тогда вы можете сделать ps++ и убедиться, что вы используете ps вместо s.

Если вы не хотите иметь отдельный указатель на ваш массив, вы можете использовать memmove для копирования данных:

memmove (s, s+1, strlen (s+1) + 1); // or just strlen (s)

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

ДругойРешение состоит в том, чтобы просто закодировать цикл:

for (char *ps = s; *ps != '\0'; ps++)
    *ps = *(ps+1);
*ps = '\0';

Это будет работать для всех строк, пустых или иных.

4 голосов
/ 19 апреля 2011

Попробуйте:

char str1[] = "abcabcabc";
char *pstr1;
pstr1 = &(str1[1]);

Плохая практика, но, поскольку она зарезервирована в стеке, она не должна убивать вас.Теперь, если вы показали нам свой код ...


Вы можете использовать strcpy :

char str1[] = "abcabcabc";
char str2[sizeof(str1)-1];

if(strlen(str1) > 0)
{
    strcpy(str2, &(str1[1]));
}
else
{
    strcpy(str2, str1);
}

// str2 = "bcabcabc";

Для C ++, вы просто используете std :: string :: substr :

std::string str1 = "abcabcabc";
std::string str2 = str1.substr(1, str1.length() - 1);
// str2 = "bcabcabc";
1 голос
/ 19 апреля 2011

Вот один из способов сделать это:

int index = 0; //index to cull
memmove( &word[ index ] , &word[ index +1], strlen( word ) - index) ;
0 голосов
/ 14 сентября 2013
#include <stdio.h>
#include <conio.h>
main(){
   char a[10];
   int i;
   gets(a);

   for (i = 0; a[i] != '\0'; i++) {
      a[i] = a[i + 1];
   }

   printf("\n");
   puts(a);
   getch();
}
0 голосов
/ 19 апреля 2011

Ну, насколько я знаю, если вы беспокоитесь о выделении памяти, вы должны скопировать (str1 + 1) в новую строку, для которой вы лично выделяете память, а затем освободить первый указатель.Действительно простой способ сделать это - просто увеличить str1 на str1 ++;Это сделает его на один символ дальше, чем раньше, и даст вам желаемый результат всего лишь строкой кода.

0 голосов
/ 19 апреля 2011

Если вы действительно хотели сказать

char str1 [] = "abcabcabc";

Тогда самая легкая вещь это

str1 = &str1[1];

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

Если вы действительно имели в виду C ++ и используете строковый объект, тогда вы можете использовать

str1 = str1.substr(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...