C++编程问题,简单

来源:百度知道 编辑:UC知道 时间:2024/05/26 06:46:11
编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”

函数头是这样的:

//pstr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n

void loopmove ( char * pstr, int steps )
{
//请填充...
}

解答:

正确解答:

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]; ----------------定义一个移位后的字符串
strcpy ( tmp, pstr + n ); --------------把原字符串第n+1个字符赋给给移位后的新字符串的第一个字符
strcpy ( tmp + steps, pstr); --------------将原来的字符串的头部向后移n位
*( tmp + strlen ( pstr ) ) = '\0';-------------结尾加'\0'
strcpy( pstr, tmp ); ----------------将存放移位以后的字符串赋给原字符串
}

函数的算法简单地说就是将前面steps个字符移到后面去,首先将pstr后面的字符复制到tmp中,然后将pstr接到tmp后面,接着再截断最后面几个多余的字符