| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2579 人关注过本帖
标题:反向输出汉字
只看楼主 加入收藏
qhz
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-28
收藏
 问题点数:0 回复次数:12 
反向输出汉字
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
char str[100];
FILE *fp;
char *p;
int i;
fp=fopen("D:\\qhz.txt","r+");
printf("输入汉字:\n");
gets(str);
printf("反向输出汉字:\n");
for(p=str+(strlen(str)-2);p>=str;p=p-2)
{
*(p+2)='\0';
printf("%s",p);
fputc(*p,fp);

}
printf("\n");
}

这个是一次看到的,引用的程序哈,不过我改了下,就运行不到了!,我不明白,怎么才能输出汉字,讲讲为什么吧,我一直认为C只能输出字符的,我的目的是想实现把输入的汉字反向输出!!
搜索更多相关主题的帖子: 汉字 输出 
2008-04-28 17:36
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
#include "string.h"
#include "stdlib.h"
#include "conio.h"


int _tmain(int argc, _TCHAR* argv[])
{
    char str[100];
    FILE *fp;
    char array[3];/*用于显示一个汉字*/
    char *p=array;
    int i;

    fp=fopen("D:\\qhz.txt","r+");
    printf("输入汉字:\n");
    gets(str);
    printf("反向输出汉字:\n");
    for(p=str+(strlen(str)-2);p>=str;p=p-2)
    {
        /**(p+2)='\0'; p只是一个指针,并指向了str中的某个元素,会改变str的内容
        printf("%s",p);
        fputc(*p,fp);*/
                  array[0]=*p,array[1]=*(p+1),array[2]='\0';
        printf("%s",array);
    }
    printf("\n");
    getch();
    return 0;
}

[[it] 本帖最后由 neverTheSame 于 2008-4-28 18:53 编辑 [/it]]

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-04-28 18:04
qhz
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-28
收藏
得分:0 
#include "string.h"
#include "stdlib.h"
#include "conio.h"
#include "stdio.h"


int main()
{
    char str[100];
    FILE *fp;
    char array[3];/*用于显示一个汉字*/
    char *p=array;
    int i;

    fp=fopen("D:\\qhz.txt","r+");
    printf("输入汉字:\n");
    gets(str);
    printf("反向输出汉字:\n");
    for(p=str+(strlen(str)-2);p>=str;p=p-2)
    {
        
        *(p+2)='\0';
   
        fputc(*p,fp);
        p[2]='\0';
        printf("%s",p);
    }
    printf("\n");
    getch();
    return 0;
    }

现在实现了运行,界面结果也正确,可是他输到指定的那个文件中就是错误的,怎么回事呀???讲讲吧,还有原理哈!!还有,要是不把getchar()去掉的话,就没有结果的!!有没有方法实现边输入,那边也就边输出呢??楼上的高手,麻烦了!!
2008-04-28 19:37
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
fputc(*p,fp);是将一个字符写入文件,而一个汉字占二个字节.
改成:
for(p=str+(strlen(str)-2);p>=str;p=p-2)
{
   fputc(*p,fp);
   fputc(*(p+1),fp);
}

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-04-28 22:16
qhz
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-28
收藏
得分:0 
真是感谢!!!
2008-04-28 22:30
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
请问楼主你的这个程序还要和其他几个程序一起用吗?是哪几个?单独运行这个程序没有汉字输出?
2008-04-29 12:12
qhz
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-4-28
收藏
得分:0 
不用哈,就是在指定的那个地方建一个文件夹,那个地方要和你的程序指定的一样哦!!然后用VC直接运行就好了,呵呵,这是个半自动的,你想把东西打到QQ上的话,要个人把那个指定的文件下的内容剪切过去哈!!要是想实现同步的话,我没有那个能力哈,问朋友说要用到Windows API ,   这个我可没有接触过哈,也弄不来,要是你有办法做成一个成品,那传来用用,顺便教我一下哈,我的目的是实现一个你把那个应用程序打开,他就到后台去了,你输字就自动反打出来,你把那人程序关了的话,就恢复了,呵呵!!!喜欢交友哈!!
2008-04-29 13:57
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/*==================================================================
             上次就看到这贴了,今天正好有时间回下贴。
                 以前写过循环的,现在写了个递归的
====================================================================

    XP 中使用的是ASCII字符集的扩展。
    字母等占1个字节,汉字占2个字节,
    ASCII编码只用到 0 - 127 (不使用字节的最高位)。
    00000000 - 01111111 (0x00 - 0x7f)

    利用这点来判断是否是汉字:
    if(汉字)      // ch <= 0 || ch >= 127, 我这里使用 ch & 0x80
        连续打印两个字符
    else
        打印一个字符

==================================================================*/

// 反序打印字符串(并可处理汉字--ASCII 扩展字符集)
// cosdos
// 2008年 5月 2日 22:37
//

#include <stdio.h>
#include <string.h>

int StrToRts(char * str);    // 反序打印字符串str

int main(void)    // C标准主函数
{
    char str[] = "Win + M  最小化所有打开的Windows的窗口;";

    printf("\n共%d个字符。\n\n", StrToRts(str));
   
    /****************************************
    StrToRts(str);
    printf("\n共%d个字符", strlen(str));
    *****************************************/
   
    getchar();
    return 0;
}

int StrToRts(char * str)
{
    char i;          // 因为只需要值1和2,所以用char
    int count = 0;   // 用于返回字符个数(汉字算一个字符)

    if(str[0] != '\0')
    {
        ++count;
        i = ( (str[0] & 0x80) ? 2 : 1 );
        count += StrToRts(str + i);
        (i & 1) ? putchar(str[0]) : printf("%c%c", str[0], str[1]) ;
    }

    return count;
}


[[it] 本帖最后由 cosdos 于 2008-5-3 18:34 编辑 [/it]]

—>〉Sun〈<—
2008-05-02 22:59
learnerboy
Rank: 2
等 级:论坛游民
帖 子:246
专家分:22
注 册:2007-11-11
收藏
得分:0 
牛!
2008-05-03 09:49
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
[bo]以下是引用 [un]cosdos[/un] 在 2008-5-2 22:59 的发言:[/bo]

// 02-05-08 22:37 ...

老大你资格很老啊,那个年代我还只是精通hello world,
并且一直把这个水平保持了5年

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-05-03 10:02
快速回复:反向输出汉字
数据加载中...
 
   



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

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