我有一个字符串:
str1 = "abcabcabc";
如何删除第一个字符?我希望最终结果是:
str1 = "bcabcabc";
答案 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();
}