13

问答题 13 /290

编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefg” 函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps ) 
{ 
 //请填充... 
} 

参考答案

正确解答1:
void LoopMove ( char *pStr, int steps ) 
{ 
 int n = strlen( pStr ) - steps; 
 char tmp[MAX_LEN];  
 strcpy ( tmp, pStr + n );  
 strcpy ( tmp + steps, pStr);  
 *( tmp + strlen ( pStr ) ) = '\0'; 
 strcpy( pStr, tmp ); 
} 

正确解答2:
 
void LoopMove ( char *pStr, int steps ) 
{ 
 int n = strlen( pStr ) - steps; 
 char tmp[MAX_LEN];  
 memcpy( tmp, pStr + n, steps );  
 memcpy(pStr + steps, pStr, n );  
 memcpy(pStr, tmp, steps );  
} 

【剖析】
 
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
 

最频繁被使用的库函数包括:

(1) strcpy
 
(2) memcpy
 
(3) memset