扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
有一个字符串,里面有字母,数字和标点,例如"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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者