给你一个字符串str, 给你一个位置flag,把位置flag后的字串搬到这个字符串的开头比如str[] = abcdefg 如果flag = 4,那么结果就是 efgabcd. 条件:不允许直接或间接使用任何的额外的变量。 #include <stdio.h> char str[] = "Hi all, I am a string :D"; int flag = 5; void func (void); int main (void) { func (); str[sizeof (str) - 1] = '/0'; /*字符串总是以NUL结尾*/ printf ("%s/n", str); puts ("/nPress ENTER to exit.../n"); getchar (); return 0; } void func (void) { /*如果没有交换到字符串最后*/ if ((sizeof (str) - 1) != (flag + str[sizeof (str) - 1])) { /*利用位操作交换str[i]和str[flag+i]*/ /*字符串最后的NUL作计数器i*/ str[str[sizeof (str) - 1]] ^= str[flag + str[sizeof (str) - 1]]; /*两个变量进行异或杂交*/ str[flag + str[sizeof (str) - 1]] ^= str[str[sizeof (str) - 1]]; /*从杂交体提纯*/ str[str[sizeof (str) - 1]] ^= str[flag + str[sizeof (str) - 1]]; /*提纯*/ ++str[sizeof (str) - 1]; /*自增计数器*/ func (); /*递归处理*/ } else { return; } }