c删除数组的第一个字符

时间:2011-04-19 04:08:41

标签: c

我有一个字符串:

str1 = "abcabcabc";

如何删除第一个字符?我希望最终结果是:

str1 = "bcabcabc";

6 个答案:

答案 0 :(得分:18)

如果你有一个指向字符串的字符指针,如:

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';

这适用于所有字符串,空或其他。

答案 1 :(得分:4)

尝试:

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";

答案 2 :(得分:1)

这是一种方法:

int index = 0; //index to cull
memmove( &word[ index ] , &word[ index +1], strlen( word ) - index) ;

答案 3 :(得分:0)

如果你真的想说

char str1 [] = "abcabcabc";

然后最简单的事情是

str1 = &str1[1];

如果要修改实际数据,则必须将所有内容向上移动一个位置。您可以使用循环或memmove()。递归函数是过度的。

如果你真的是指C ++并且你正在使用字符串对象,那么你可以使用

str1 = str1.substr(1);

答案 4 :(得分:0)

据我所知,如果你担心内存分配,你必须将(str1 + 1)复制到一个你亲自为其分配内存的新字符串中,然后释放第一个指针。 真正简单的方法就是用str1 ++增加str1;这会使它指向比以前更远的一个字符,只需一行代码即可获得所需的结果。

答案 5 :(得分:0)

#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();
}