牛骨文教育服务平台(让学习变的简单)
博文笔记

把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间

创建时间:2016-09-13 投稿人: 浏览次数:889

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;

     

}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。