关于字符串的翻转的问题,在求职面试时遇到的比较多.当时自己也总结一些,今天又在
smallfish的blog中看到,故再次小结下
这个问题的关键是怎么定位字符的问题,能定位了,啥都好办了
比如字符串"linewer"
(1)C解法: (i)数组中存放(ii)一指针指向的字符串, 用两个指针,一个指向头,一个指向尾,递减比较即可办到
还搜到个递归的解法:
//void test()
//{
// int c = getchar();
// if (c != '\n')
// test();
// putchar(c);
//}
//
//int main(int argc, char *argv[])
//{
// test();
// return 0;
//}
int main()
{
int c = getchar();
if (c != '\n')
main();
putchar(c);
return 0;
}
(2)linux的一个命令 rev "linewer"
(3) str="linewer";num=${#str};while [ $num -ge 0 ];do echo -n ${str:$num:1}; num=$(($num -1));done
(4) perl -e '$str="linewer"; print join "",reverse((split "",$str))'
(5) python -c 'str="linewer"; str=list(str); str.reverse(); print "".join(str)' #这个和上面的perl其实是一样的
(6) python -c 'str="linewer"; print str[::-1]' #python风格的
(7) python -c 'str="linewer";print reduce(lambda x,y:y+x ,str)' 这个虽是python的写法,应该算是函数式编程Haskell等的解法!
(8) 这个scheme的没看懂。。。。。。。。
(define (Reverse x)
(define (f x y)
(if (null? x) y
(f (cdr x) (cons (car x) y))))
(f x `())) |
阅读(1521) | 评论(0) | 转发(0) |