C语言中如何逆向输出中文

作者&投稿:景饲 (若有异议请与网页底部的电邮联系)
C语言中如何将中文字符倒序输出~

先用strrev库函数把整个字符串倒过来,然后利用汉字编码为负数的特点判断为汉字的倒序连续输出两个字符即可达到目的。举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#include "string.h"int main(void){ char a[]="abcdefg我们都是来自五湖四海123456789",i; strrev(a);//把整个字符串倒过来 for(i=0;a[i];i++) if(a[i]>0) printf("%c",a[i]);//输出非汉字字符 else printf("%c%c",a[i+1],a[i++]);//输出汉字 printf("
"); return 0;}

中文是双字节编码,要用 wchar。若是中文与英文混合码,则比较麻烦。
若用 char ,全中文,可以尝试 双字节交换再输出。例如:
int main( )
{
char str[80]="尝试双字节交换再输出";
char t1,t2;
int L,i;
L=strlen(str);
for (i=0;i<L/2;i=i+2){
t1=str[i];t2=str[i+1];
str[i] = str[L-2-i]; str[i+1]=str[L-1-i];
str[L-2-i]=t1; str[L-1-i]=t2;
}
printf("%s",str);
return 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);
}
记得给分给我!!!

#include <stdio.h>
#include <string.h>
void reverse(char *a);
int main()
{
char str[100];
printf("请输入字符串:");
gets(str);
printf("字符串为:%s\n",str);
reverse(str);
printf("反转后为:");
puts(str);
getchar();
return 0;
}

//首先若是汉字的话,占用两个字节。下面的程序是反转汉字的。
void reverse(char *s)
{
char temp, *end = s + strlen(s) - 1;
while( end > s)
{
--end;
temp = *s;
*s = *end;
*end = temp;
++s;
++end;
temp = *s;
*s = *end;
*end = temp;
end--;
end--;
++s;
}
}

#include "stdio.h"
void Convert(int n)
{
int x=0,a[100];
while(n)
{
a[x++]=n%2;
n/=2;
}
--x;
printf("\n二进制为:\n");
while(x>=0)
printf("%d",a[x--]);
}
void main()
{
int m;
printf("请输入一个十进制数:\n");
scanf("%d",&m);
Convert(m);
}
这个吧
/////////////////////////////////////////
////////////////////////////////////////
你的意思是返回一个二进制数?
#include "stdio.h"
int Convert(int n)
{
int x=0,a[100],m=0;
while(n)
{
a[x++]=n%2;
n/=2;
}
--x;
while(x>=0)
m=10*m+a[x--];
return m;
}
void main()
{
int m,n;
printf("请输入一个十进制数:\n");
scanf("%d",&m);
n=Convert(m);
printf("%d",n);
}
不过返回的数形式上是二进制。


首先你要知道中文编码是用的两个字节的。所以必要判断你的字符长的长度之后,每两个字符为单位来调换位置。

这个取决于你是怎么存储中文的, 上面两个人都说中文占两个字节, 这是不一定的, 跟编码方式有关, 所以这个问题可能很简单(比如你按一个中文两个字节做真的就成了),也可能比较复杂


c语言中字符串的长度是如何计算的?
可以将整数当做字符串(字符串长度不超过10)接收,然后反向输出字符数组元素即可。字符串实际长度可以用strlen函数来计算。方法程序如下:include<stdio.h> include<string.h> main(){char a[10];int i,j;scanf("%s",a);j=strlen(a);for(i=j-1;i>=0;i--)printf("%c",a[i]);printf("\\...

逆向工程与正向工程的区别是什么?
1、过程不同 正向工程是通过到实现语言的映射而把模型转换为代码的过程。逆向工程是通过从特定实现语言的映射而把代码转换为模型的过程。2、程序不同 正向工程就是从目标出发,自己开发软件,而逆向工程则是拿到了别人现成的软件,然后通过反汇编等手段,把该程序做出来。

反汇编,是指逆向求得它的伪代码,还是它的源代码,还是直接查看它的汇编语...
汇编语言 反汇编是把可执行的二进制文件转为汇编语言代码,进而可以研究该程序,或者更多用于破解共享软件。常用的反汇编工具有W32Dasm,C32asm等

软件工程中的正向工程和逆向工程分别是什么?
正向工程和逆向工程是软件工程中两种不同的工程技术。正向工程,也称为源代码生成或代码合成,是指通过模型或者设计文档生成可执行的代码的过程。在这个过程中,设计模型被转换为目标语言的源代码。正向工程的目标是生成高质量的代码,同时保持原有的设计特性。这种工程技术通常用于根据需求或者设计规格创建新...

以后想学C和汇编,做免杀和逆向这些,是不是需要很强大的数学底子啊?_百 ...
多少人用着易语言,学学OD,CE,汇编都半生不熟就开始搞了,磕磕碰碰以后不一样风生水起。做到后面还是正儿八经的用C来的实在。当然不是怂恿lz无基础就上手。野路子肯定是有代价的。只是想说明一点:搞逆向,就是个熟练工种,什么基础都没有的人都能玩转。免杀不太清楚,逆向的话,上手甚至对汇编...

【译言译语】如何巧妙的运用逆向思维
下面就翻译中句子结构方面的一些难点做一下总结,看看翻译中如何利用逆向思维?一、省略及省略的原则英语多省略,汉语多重复,这是两者的明显区别之一(见第二章第三节:英汉语言的主要差异)。所以英译汉时,为了使译文"忠实而通顺",需要在理解原文省略成分的基础上,根据汉语表达习惯,对省略部分予以补充或灵活处理。 据说...

如何反编译c语言程序?
需要注意的是,虽然无法完全恢复原始的C代码,但通过分析汇编代码,我们可以对程序的功能和逻辑有一定的了解。这对于软件安全分析、漏洞研究以及逆向工程等领域是非常有价值的。在这些场景中,专家们会利用反汇编工具来深入理解和分析软件的内部工作机制。总的来说,虽然我们不能直接将C语言程序反编译回原始...

c语言怎样反汇编?
1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,Linux平台使用最多的是GDB和Linux版的IDA。 OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一...

求C语言题目
题目:输出特殊图案,请在c环境中运行,看一看,very beautiful!1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码:#include "stdio.h"main(){char a176,b219;printf("%c%c%c%c%c\\n",b,a,a,a,b);printf("%c%c%c%c%c\\n",a,b,a,b,a);printf("%c%c%c%c%c\\n",a,a,b,...

VC程序逆向修改,来个反汇编高手,有偿服务
OllyDbg的调试和exe文件的内部指令,使用反向IDA生成便于阅读的代码。这两种效果的组合。前者用于运行调试器,找到目标指令的位置,这是反转的早期工具,用于分析的exe文件的内部结构。如何去改变它,而不是简单地说。近似??原则可以告诉你 OLLYDBG,运行,点击菜单栏上的打开,选择你的exe文件,运行,找到...

永胜县17117051309: C语言中如何将中文字符倒序输出 -
官泼功亮: 一个汉字扩展ASCII码),而getchar()每次只能读入一个字节,因此读入汉字时,则需要用gets()函数. 倒叙输出汉字串时,有两种方法,一是从字符串末端开始,每次输出两个字节,二是直接汉字将字符串在数组中倒置,然后再用puts()函数直接输出. 以上两种方法都有局限性,一旦含有非汉字字符,极有有可能造成乱码.

永胜县17117051309: C语言如何逆序输出一句中文的话 -
官泼功亮: 中文是双字节编码,要用 wchar.若是中文与英文混合码,则比较麻烦. 若用 char ,全中文,可以尝试 双字节交换再输出.例如: int main( ) { char str[80]="尝试双字节交换再输出"; char t1,t2; int L,i; L=strlen(str); for (i=0;i<L/2;i=i+2){ t1=str[i];t2=str[i+1]; str[i] = str[L-2-i]; str[i+1]=str[L-1-i]; str[L-2-i]=t1; str[L-1-i]=t2; } printf("%s",str); return 0; }

永胜县17117051309: C语言如何做到中文倒序输出,例如输入“我是谁”,则输出“谁是我” -
官泼功亮: 1 2 3 4 5 6 7 8 9 10#include <stdio.h> #include <string.h> intmain(intargc,char*argv[]){chara[100],i;scanf("%s",a);for(i=strlen(a)-1;i>0;i-=2)printf("%c%c",a[i-1],a[i]);printf("\n");return0; }

永胜县17117051309: C语言中,怎么将一个数反向输出? -
官泼功亮: 代码: #include<stdio.h> void main() {long x,temp=0;printf("请输入一个数:\n");scanf("%ld",&x);while(x!=0){temp=temp*10+x%10;x=x/10;}printf("这个数的方向输出的结果是:%ld\n",temp); }图:

永胜县17117051309: C语言逆向输出 -
官泼功亮: 楼上已经写了代码,我帮你解释一下!! %是取余!得到的是低位!! /是取整,得到的是最高位!这个题目就是不断对10取余! 比如198,先余10,得8!这是最低位! 除10得19,作为下一个取余的基数! 接着就对19取余,得9;除10得1 1再除得0,余1. 可以 以取整结果为0结束循环! 依次输出就行啦!!

永胜县17117051309: 如何用C语言把输入的一句话逆序输出 -
官泼功亮: #include <stdio.h> #include <string.h> int main() { int i; char str[256]; gets(str); for(i=(strlen(str)-1);i>=0;i--)//**i的初始值应该是strlen(str)-1**// putchar(str[i]); return 0; } 楼上的有点小问题,不过大体应该是最简单的了.不过这个是逆序输出,如果你想将字符数组逆序,就不能用这个了!

永胜县17117051309: C语言如何做到中文倒序输出? -
官泼功亮: 思路:要想输出一个整数n的倒序,则先输出个位、十位、百位……,个位可以通过n%10得到,十位可以通过n/10%10得到,百位可以通过n%100%10得到……,所以可以通过先取余输出再除以10直到该数等于0为止.

永胜县17117051309: 怎么用C语言实现,输入一个输将它反向输出,如输入1234输出4321,求思路解释,谢谢咯 -
官泼功亮: #include void rev() {char c; if((c=getchar())!='\n')rev(); putchar(c); } int main() {rev(); return 0; }

永胜县17117051309: c语言中怎么反向输出字符串 -
官泼功亮: #include<string.h> #include<stdio.h> main () { char a[80],c; int i,b; gets(a); b=strlen(a); for(i=0;i<=b/2;i++) { c=a[i]; a[i]=a[b-1-i]; a[b-1-i]=c; } printf("%s\n",a); return 0; }

永胜县17117051309: C语言中带有中文的字符串怎么翻转 -
官泼功亮: 看中文字符编码 windows一般是gbk 两个字节 作为一个汉字,第一个字节必然是0xA0以上的.遇到这种 把两个字节作为一个整体进行翻转. 对于带汉字的,用一个字符串进行翻转比较麻烦 最好用另一个字符串进行存储. void reverse_with_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网