如何从字符串中删除字符?
如果我有字符串"abcdef",我想删除"b"我该怎么做?
使用以下代码可以轻松删除第一个字符:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word[] = "abcdef";
char word2[10];
strcpy(word2,&word[1]);
printf("%s\n", word2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
strncpy(word2,word,strlen(word)-1);
Run Code Online (Sandbox Code Playgroud)
将给我没有最后一个字符的字符串,但我仍然没有弄清楚如何删除字符串中间的字符.
sta*_*ker 57
memmove 可以处理重叠区域,我会尝试类似的东西(未测试,可能+ -1问题)
char word[] = "abcdef";
int idxToDel = 2;
memmove(&word[idxToDel], &word[idxToDel + 1], strlen(word) - idxToDel);
Run Code Online (Sandbox Code Playgroud)
之前: "abcdef"
后: "abdef"
Fab*_*ral 38
试试这个 :
void removeChar(char *str, char garbage) {
char *src, *dst;
for (src = dst = str; *src != '\0'; src++) {
*dst = *src;
if (*dst != garbage) dst++;
}
*dst = '\0';
}
Run Code Online (Sandbox Code Playgroud)
测试程序:
int main(void) {
char* str = malloc(strlen("abcdef")+1);
strcpy(str, "abcdef");
removeChar(str, 'b');
printf("%s", str);
free(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
>>acdef
Run Code Online (Sandbox Code Playgroud)
我删除所有指定字符的方法:
void RemoveChars(char *s, char c)
{
int writer = 0, reader = 0;
while (s[reader])
{
if (s[reader]!=c)
{
s[writer++] = s[reader];
}
reader++;
}
s[writer]=0;
}
Run Code Online (Sandbox Code Playgroud)
真的很惊讶这之前没有发布过。
strcpy(&str[idx_to_delete], &str[idx_to_delete + 1]);
Run Code Online (Sandbox Code Playgroud)
相当高效和简单。strcpy用于memmove大多数实现。
char a[]="string";
int toBeRemoved=2;
memmove(&a[toBeRemoved],&a[toBeRemoved+1],strlen(a)-toBeRemoved);
puts(a);
Run Code Online (Sandbox Code Playgroud)
试试这个 .memmove会重叠它.测试.
| 归档时间: |
|
| 查看次数: |
199291 次 |
| 最近记录: |