有一个字符串,里面有字母,数字和标点,例如"1w4rt,5t7?9u"。要求把里面的字母按原来的顺序倒着排列,别的数字和标点不变,结果应该是"1u4tt,5r7?9w"。
我用c 写了个简单的算法实现,可以参考一下.
/
#include <stdio.h>
#include <string.h>
//判读一个字符是否为字母,不区分大小写
/********下面这个函数isAlphabet1不知道为什么在linux下运行不了,有知道的朋友来帮看下*****************/
bool isAlphabet1(char ch)
{
return ((ch >= 65 && ch <= 90)||(ch >= 97 && ch <= 122));
}
/*****************************************************************************************************************/
//所以自己把上面的函数改了下面这样的就可以运行了
int isAlphabet(char ch)
{
if(((ch >= 65 && ch <=90)||(ch >=97 && ch <=122)))
return 1;
else
return 0;
}
//从两头到中间找,然后替换
char* reverseStringByOrder(char * str)
{
int length=strlen(str);//字符串长度
int left=0,right=length-1;
while(left<right)
{
//跳过非字母
while(!isAlphabet(str[left]))
{
left ++;
}
//跳过非字母
while(!isAlphabet(str[right]))
{
right--;
}
///交换两个字母
char temp=str[left];
str[left]=str[right];
str[right]=temp;
left++;
right--;
}
return str;
}
int main(int argc, char* argv[])
{
char test []="1w4rt,5t7?9u";
printf("the result:%s/n",reverseStringByOrder(test));
return 0;
}
//