我有一个字符串:
str1 = "abcabcabc";
Run Code Online (Sandbox Code Playgroud)
如何删除第一个字符?我希望最终结果是:
str1 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 19
如果你有一个字符串指向字符串,如:
char *s = "This is my string";
Run Code Online (Sandbox Code Playgroud)
那你就可以做s++.
如果你有一个字符数组,你最好的选择可能是有一个指向该数组的指针:
char s[] = "This is my string";
char *ps = s;
Run Code Online (Sandbox Code Playgroud)
然后你可以做ps++,并确保你使用ps而不是s.
如果您不想拥有指向阵列的单独指针,则可以使用memmove复制数据:
memmove (s, s+1, strlen (s+1) + 1); // or just strlen (s)
Run Code Online (Sandbox Code Playgroud)
虽然这些都不适用于最初为空的字符串,所以你必须先检查它.同时请记住这是不可取的企图修改字符串字面量以这种方式(或任何方式,真的),因为它是不确定是否该是允许的.
另一种解决方案是简单地编写循环代码:
for (char *ps = s; *ps != '\0'; ps++)
*ps = *(ps+1);
*ps = '\0';
Run Code Online (Sandbox Code Playgroud)
这适用于所有字符串,空或其他.
尝试:
char str1[] = "abcabcabc";
char *pstr1;
pstr1 = &(str1[1]);
Run Code Online (Sandbox Code Playgroud)
不好的做法,但是由于它是保留在堆栈上的,因此它不应杀死您。现在,如果您向我们展示了您的代码...
您可以使用strcpy:
char str1[] = "abcabcabc";
char str2[sizeof(str1)-1];
if(strlen(str1) > 0)
{
strcpy(str2, &(str1[1]));
}
else
{
strcpy(str2, str1);
}
// str2 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)
对于C ++,您只需使用std :: string :: substr:
std::string str1 = "abcabcabc";
std::string str2 = str1.substr(1, str1.length() - 1);
// str2 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)