科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件对一个字符串里的字母倒序,别的字符保持原位不变?

对一个字符串里的字母倒序,别的字符保持原位不变?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对一个字符串里的字母倒序,别的字符保持原位不变?

作者:csdn 来源:csdn 2009年12月15日

关键字: 问答 ASP.NET

  • 评论
  • 分享微博
  • 分享邮件

 对一个字符串里的字母倒序,别的字符保持原位不变?

有一个字符串,里面有字母,数字和标点,例如"1w4rt,5t7?9u"。要求把里面的字母按原来的顺序倒着排列,别的数字和标点不变,结果应该是"1u4tt,5r7?9w"。

我觉得可以用Regex.Split将字母提取出来,随后可以循环原字符串,是否和提取的字符串中的字符相同,若相同的第一个取提取出来的数组的对应倒序位置的字母

//C/C++ 用交換法。
inline bool isalpha(char a){return (a>='a' && a <='z')||(a>='A' && a <='Z');}
inline void swap(char *a,char *b){char c = *b ; *b = *a ;  *a = c ; }
void ReverseAlpha(char *source)
{
  if(source == NULL)
    return ;
  char *pb = source;
  char *pe = pb;
  while(*pe)++pe ;
  for(; *pb ; ++pb)
  {
    if(isalpha(*pb))
    {
      while(!isalpha(*pe)) --pe ;
      if(pb < pe)  //已交換完成
        swap(pb,pe--);
      else
        break;
    }
  }
}
int main(int argc, char* argv[])
{
    char *test = "1w4rt,5t7?9u";
    ReverseAlpha(test);  //1u4tt,5r7?9w
    printf("the result:%s\n",test);
    return 0;

堆栈法:
#include "stdio.h"

char Stack[20] = {0};
char *psBottom = Stack;
char *psTop = Stack;

char Input[20] = "1w4rt,5t7?9u";

void main()
{
char *pIndex = Input;

while (*pIndex != '\0')
{
if ((*pIndex >= 'a')&&(*pIndex <= 'z'))
{
*psTop = *pIndex;
psTop++;
}

pIndex++;

if (psTop > (psBottom + 20))
{
break;
}
}

pIndex = Input;

while (*pIndex != '\0')
{
if ((*pIndex >= 'a')&&(*pIndex <= 'z'))
{
if (psTop > psBottom)
{
psTop--;
*pIndex = *psTop;
}
}

pIndex++;
}

printf("%s\n",Input);
}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章