把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间
2、字符移位
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?
输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述:
对于每组数据,输出移位后的字符串。
输入例子:
AkleBiCeilD
输出例子:
kleieilABCD
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include
<stdio.h>
#include
<string.h>
#include
<ctype.h>
int main()
{
char str[1000];
while ( scanf ( "%s" ,
str) != EOF)
{
int j;
int len
= strlen (str);
for ( int i
= len - 1; i > 0; i--)
{
if ( islower (str[i]))
{
j
= i;
while ( islower (str[j])
&& j >= 1)
{
j--;
}
if (j
== 0 && islower (str[j]))
{
break ;
}
if ( isupper (str[j]))
{
char temp
= str[j];
for ( int k
= j; k < i; k++)
{
str[k]
= str[k + 1];
}
str[i]
= temp;
}
}
}
printf ( "%s
" ,
str);
}
return 0;
}
|
其实就是用编程思想描述以下执行过程:
AbCd
->AbdC
->bdAC
这是一种执行方法,但也有另外一种执行方法:
AbCd
->bCdA
->bdAC
实现代码如下:
for(i=0;i<n;i++)
{
if(a[i]>"A"&&a[i]<"Z")
{
t=a[i];
for(j=i;j<n-1;j++)
a[j]=a[j+1];
a[n-1]=t;
}
else
break;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。