给定一个长度为 n 的 char 数组缓冲区,从位置 pos 删除 m 个字符
Given a char array buffer of length n delete m characters from position pos
我想从无符号字符缓冲区中删除字符
C语言:
unsigned char buff[n] = "...."; // len n byte array
我想到了使用 memmove
memmove(buff + pos, buff + pos + m, ???);
任何人都可以帮助解决???的价值?是的,我得到了删除 m 个字符的正确结果,而不管 ???值(n - pos 到 n 之间的任何值)
m和pos的值都小于n且buff是字节数组(一个数据包)
嗯,这段代码根本没有优化,但展示了我认为最容易理解的方法:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void delete(int p, const char * str){
char *done;
int t = strlen(str);
if(p>t||p<=0){
return;
}else{
strcpy(done, str);
strcpy(done+p-1,str+p);
}
strcpy(str, done);
}
int main(int argc, char **argv){
char buff[] = "abcdefghi";
delete(3, buff);
printf(buff);//it prints abcdefghi
return 0;
}
想法很简单 strcpy 有两个参数,第一个是指向目标字符串的指针 (str
),第二个是指向原点的指针。
我们首先将整个原始字符串 (str
) 复制到我们的临时字符串 (done
)
然后我们只需将 str+p
(p 是字符串上从 1 开始到 strlen 结束的位置,因为 strlen 不包括我们检查到最后位置的终止符字节)复制到 done+p-1
为我们想要 erase/overlap 位置 p
的字符
最后我们直接把done
复制到原来的字符串(str
)就成功擦掉了一个字符
此外,由于我们使用的是 strcpy,该函数会处理终止符字节,我们也不必太注意释放临时指针,尽管编译器会抱怨原始字符串的转换是解决起来相当简单,但为了容易弄清楚我一直没有回答的逻辑
我想从无符号字符缓冲区中删除字符
C语言:
unsigned char buff[n] = "...."; // len n byte array
我想到了使用 memmove
memmove(buff + pos, buff + pos + m, ???);
任何人都可以帮助解决???的价值?是的,我得到了删除 m 个字符的正确结果,而不管 ???值(n - pos 到 n 之间的任何值)
m和pos的值都小于n且buff是字节数组(一个数据包)
嗯,这段代码根本没有优化,但展示了我认为最容易理解的方法:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void delete(int p, const char * str){
char *done;
int t = strlen(str);
if(p>t||p<=0){
return;
}else{
strcpy(done, str);
strcpy(done+p-1,str+p);
}
strcpy(str, done);
}
int main(int argc, char **argv){
char buff[] = "abcdefghi";
delete(3, buff);
printf(buff);//it prints abcdefghi
return 0;
}
想法很简单 strcpy 有两个参数,第一个是指向目标字符串的指针 (str
),第二个是指向原点的指针。
我们首先将整个原始字符串 (str
) 复制到我们的临时字符串 (done
)
然后我们只需将 str+p
(p 是字符串上从 1 开始到 strlen 结束的位置,因为 strlen 不包括我们检查到最后位置的终止符字节)复制到 done+p-1
为我们想要 erase/overlap 位置 p
最后我们直接把done
复制到原来的字符串(str
)就成功擦掉了一个字符
此外,由于我们使用的是 strcpy,该函数会处理终止符字节,我们也不必太注意释放临时指针,尽管编译器会抱怨原始字符串的转换是解决起来相当简单,但为了容易弄清楚我一直没有回答的逻辑