| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 732 人关注过本帖, 1 人收藏
标题:c语言求助,关于反序问题
只看楼主 加入收藏
雨夜2133
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2011-7-11
收藏(1)
 问题点数:0 回复次数:13 
c语言求助,关于反序问题
输入字符串str,倒叙输出str,注意支持中文,例如 “Tom吃西瓜” 输出 “瓜西吃moT”。
我能单独将汉字或者字母反序,但是放在一起就做不到了,是不是应该先判定是什么类型,在反序阿!但是应该怎么判定又不知道了,麻烦看到的支支招!谢了!!
搜索更多相关主题的帖子: c语言 中文 吃西瓜 字符串 汉字 
2011-07-11 16:05
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
    char a[] = "我sdfasd呵sdafs呵";
    char *p = a,*q;
    bool s[100] = {0};
    int n = 0;
    while(*p)
    {
        if(0x80 & *p)
        {
            s[p-a] = true;
            p+=2;
            n++;       
        }
        else
            p++;
    }
    printf("%d\n",n);
    char b[100] = {0};
    if(s[strlen(a)-2])
        q = a+strlen(a)-2;
    else
        q = a+strlen(a)-1;
    int i = 0;
    while(q>=a)
    {
        if(s[q-a])
        {
            b[i++] = *q;
            b[i++] = *(q+1);
            if(s[q-2-a])
                q-=2;
            else
                q--;
        }
        else
        {
            b[i++] = *q;
            if(s[q-2-a])
                q-=2;
            else
                q--;
        }
    }
    puts(b);
    return 0;
}
写的我好累 不过总算是实现了

                                         
===========深入<----------------->浅出============
2011-07-11 17:02
digogog
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-4-27
收藏
得分:0 
这样实现最简单
#include <math.h>
main()
{
            printf("tome吃西瓜\n");
            system("pause");
            printf("瓜西吃tom\n");
            system("pause");
            }
2011-07-11 17:29
雨夜2133
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2011-7-11
收藏
得分:0 
thank

[ 本帖最后由 雨夜2133 于 2011-7-12 16:16 编辑 ]
2011-07-12 16:15
雨夜2133
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2011-7-11
收藏
得分:0 
回复 2楼 laoyang103
谢谢啊!!!!
2011-07-12 16:15
雨夜2133
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2011-7-11
收藏
得分:0 
我发现一种很简单的方法,就是开始就将他们反序,然后再来将其中的汉字部分做变化,因为反过顺序后,汉字变成其他的字,只要把他们变回来就行了!!
#include<stdio.h>
void main()
{
    char s[80];
    int i,t,n=0,temp;
    gets(s);
    while(s[n]!='\0')
        n++;
    for(i=0;i<n/2;i++)
    {
        t=s[i];//将字符串反序
        s[i]=s[n-i-1];
        s[n-i-1]=t;
    }
    i=0;
    while(i<n)
    {
        if(s[i]>128||s[i]<0)//判断是否是汉字
        {
            temp=s[i];//将汉字变为原来的字
            s[i]=s[i+1];
            s[i+1]=temp;
            i=i+2;//汉字占两个字符,所以加2.
        }
        else
            i++;
    }
    puts(s);
}

[ 本帖最后由 雨夜2133 于 2011-7-12 17:30 编辑 ]
2011-07-12 17:28
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:0 
good
  while(s[n]!='\0')
        n++;
这句用n=strlen(s)好点

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2011-07-12 19:59
菜鸟auto
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:100
注 册:2010-7-23
收藏
得分:0 
if(0x80 & *p) 这个是什么意思呢? 求解释
2011-07-12 20:02
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <wchar.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>

#define SIZE    81
typedef wchar_t WCHAR, * PWSTR;

void Reverse(PWSTR);

int main(void) {
    WCHAR pwstr[SIZE];
    setlocale(LC_ALL, "chs");
    fgetws(pwstr, SIZE, stdin);
    Reverse(pwstr);
    printf("\nPress any key to continue...");
    getch();
    return 0;
}

void Reverse(PWSTR szpwstr) {
    if(*szpwstr && *szpwstr != L'\n')
        Reverse(szpwstr + 1);
    wprintf(L"%c", *szpwstr);
}

My life is brilliant
2011-07-12 20:52
pjfjx1234
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-7-2
收藏
得分:0 
回复 5楼 雨夜2133
不错。。。。不错
2011-07-12 21:18
快速回复:c语言求助,关于反序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013892 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved