- 编写一个函数,作用是把一个 char 组成的字符串循环右移 n 个。比如原来是“abcdefghi”
- 如果 n=2,移位后应该是“hiabcdefgh”
- 函数头是这样的:
- //pStr 是指向以'\0'结尾的字符串的指针
- //steps 是要求移动的 n
- void LoopMove ( char * pStr, int steps )
- {
- //请填充...
- }
- 方法一:
- void LoopMove (char *pStr, int len)
- {
- char *newstr = NULL;
- int strlenght = strlen(pStr);
- int i;
- newstr = (char *)malloc(len + 1);
- if (newstr == NULL)
- {
- printf("Malloc Error\n");
- }
- memset(newstr,0, len+1);
- for (i=0; i<len; i++)
- {
- *newstr++ = *(pStr + strlenght - len + i);
- }
- for (i=strlenght-len; i>0; i--)
- {
- *(pStr+len+i-1) = *(pStr + i - 1);
- }
- for (i=0; i<len; i++)
- {
- *(pStr + len - i -1) = *(--newstr);
- }
- }
方法二:
- 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 );
- }
方法三:
- 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 );
- }