输入是一个字符串:HeLloWorlD
例如,
输出应为:DlHelLoorW
大写字母将保持其位置,并且仅在彼此之间的这些位置上旋转,小写字母也是如此
第一个字母是H
,下一个大写字母是L
,在旋转中字母H
将取代L
的位置和 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
,但我尝试添加 if
条件,但只会让事情变得更糟
最佳答案
一种方法是在遍历字符串时跟踪遇到的最后一个大写/小写字符以及遇到的第一个大写/小写字符的索引,测试每个字符。
请注意,我使用了一些您可能还没有学过的东西。希望这不会让您感到困惑。
关于c - 旋转串,大资金持有现货/小额持有现货,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43437926/