免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6841 | 回复: 17
打印 上一主题 下一主题

求个字符串反序的程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-22 01:07 |只看该作者 |倒序浏览
文件1内容:

今天,天气很好,oh yeah!


要求输出(输出到终端或文件):


!yeah oh,好很气天,天今

论坛徽章:
0
2 [报告]
发表于 2010-02-22 11:43 |只看该作者
what about the sample?
#include <stdlib.h>
#include <stdio.h>

int main()
{
        char *org = "hello kafka0102";
        int len = strlen(org);
        char *str = (char*)malloc(len+1);
        int j = 0;
        int i = len-1;
        for(;i>=0;i--){
                str[j++] = org[i];      
        }
        str[j] = '\0';
        printf("org:%s,new str:%s\n",org,str);
        free(str);
        return 1;
}

论坛徽章:
0
3 [报告]
发表于 2010-02-22 11:56 |只看该作者
好难啊,中英混合的~~~

论坛徽章:
0
4 [报告]
发表于 2010-02-22 11:58 |只看该作者
纯char序列的倒是可以提供一个,中英混合的暂时没有想到好方法
  1. void reverse(char* str)
  2. {
  3.         int i, j;
  4.         for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {
  5.                 str[i] ^= str[j];
  6.                 str[j] ^= str[i];
  7.                 str[i] ^= str[j];
  8.         }
  9. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-02-22 12:04 |只看该作者
中英文可以比较ascii啊!

论坛徽章:
0
6 [报告]
发表于 2010-02-22 12:50 |只看该作者
#include <stdlib.h>
#include <stdio.h>

int main()
{
        char *org = "今天,天气很好,oh yeah!";
        int len = strlen(org);
        char *str = (char*)malloc(len+1);
        memset(str,0,len+1);
        int j = len-1;
        int i = 0;
        int k = 0;
        int tmp_index = -1;
        for(;i<len;i++){
                  if(isalnum(org[i])){
                        if(tmp_index < 0){
                                tmp_index = i;
                        }
                }else{
                        if(tmp_index > 0){
                                for(k=i-1;k>=tmp_index;k--){
                                        str[j--] = org[k];
                                }
                        }
                        int val = (int)org[i] & 0xFF;
                        if(val > 0x80 ){
                                str[j--] = org[i+1];
                                str[j--] = org[i];
                                i++;
                        }else{
                                str[j--] = org[i];
                        }
                        tmp_index = -1;
                }
        }
        if(tmp_index > 0){
                for(k=i-1;k>=tmp_index;k--){
                        str[j--] = org[k];
                }
        }
        printf("org:%s,new str:%s\n",org,str);
        free(str);
        return 1;
}

论坛徽章:
0
7 [报告]
发表于 2010-02-22 14:34 |只看该作者
中文还要考虑字符编码的。。。gbk/gb2312/big5 和 utf-8 的处理方式可不一样

论坛徽章:
0
8 [报告]
发表于 2010-02-22 18:49 |只看该作者
检测编码,转存到 UTF-16LE/BE wchar_t[],挨个倒序,完了再转换回去。

论坛徽章:
0
9 [报告]
发表于 2010-02-22 19:20 |只看该作者
utf8

论坛徽章:
0
10 [报告]
发表于 2010-02-22 20:55 |只看该作者
本帖最后由 presidentccj 于 2010-02-23 00:48 编辑

谢谢各位。
省懒用perl试了一下,不过oh yeah!按单词反序还有问题……改天再试

[root@ccj reverse]# perl reverse2.pl  file

!haey ho,好很气天,天今
[root@ccj reverse]# more file
今天,天气很好,oh yeah!
[root@ccj reverse]# more reverse2.pl
#!/usr/bin/perl -w
use encoding "utf-8";
use Encode;
open(ONE,"$ARGV[0]") or die $!;
while ($string = <ONE>) {
$str=decode("utf8",$string);
$s=reverse $str;
print $s,"\n"
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP