输入是一个字符串:HeLloWorlD
例如,
输出应为:DlHelLoorW
大写字母将保留其点,并且仅在彼此之间的那些点旋转,小写字母也是如此
第一个字母为H
,下一个大写字母为L
,在轮换中,字母H
将带有L
的地点和{ {1}}会占用L
的位置等等,对于小写字母也是如此
我这样做了,将字符串分成两个字符串,大写和小字符串,用W
填充空白点
所以0
和smallString = 0e0lo0orl0
会出现应该旋转它们的函数。我想在只有字母的点之间进行旋转,因此capitalString = H0L00W000D
变为smallString
和smallString = 0l0el0oor0
,但我的功能只会旋转所有字符
capitalString = D0H00L000W
我知道它的编写方式,无论如何都不考虑static void rotateString ( char * a, int n)
{
int i, j;
char buffer[BUFSIZ] = { '\0' };
for ( i = n, j = 0; a[i] != '\0'; i++ )
buffer[j++] = a[i], a[i] = '\0' ;
strcat ( buffer , a ), strcpy ( a , buffer);
}
,但我尝试添加0
条件,但只会让事情变得更糟
答案 0 :(得分:1)
一种方法是跟踪遇到的最后一个大写/小写字符以及在遍历字符串时遇到的第一个大写/小写字符的索引,测试每个字符。
请注意,我使用了一些你可能尚未学过的东西。希望这不会让你感到困惑。