编写一个函数,实现将char类型的字符串,循环右移n个位置
例如 abcdefg 右移2个位置变成 fgabcde
void LoopMove(char* pStr, int n)
{
int str_n = strlen(pStr);
if (str_n == 0 || n < 0)
return;
int st = n % str_n;
char temp[128];
memcpy(temp,pStr+str_n-st,st);
memcpy(temp+st,pStr,str_n-st);
memcpy(pStr, temp, str_n);
}
扩展:
memcpy 是C和C++使用的内存拷贝函数,函数原型为void *memcpy(void *dest, void *source, unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标dest中。
strcpy 是C++语言的一个标准函数,函数原型 char *strcpy(char* dest, const char *src); 作用是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间;返回指向dest的指针。
char* strcpy(char* des, const char* source)
{
char* r = des;
assert((des != NULL) && (source != NULL));
while ((*r++ = *source++) != '\0');
return des;
}
/*其中assert(是宏,而非函数) 为断言,assert通过检查表达式的值来决定是否需要终止执行程序,
即若表达式值为假,那它就会首先向标准错误流stderr打印一条出错信息,再由abort函数终止程序执行*/
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
memset 是C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
函数原型 :void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s。