#include<stdio.h>
main()
{
char a[3]="一";
printf("%c%c/n",a[0],a[1]);
printf("%d %d/n",a[0],a[1]);
unsigned int i=a[1];
int j=a[0];
printf("%u %d/n",a[1],a[0]);
printf("%d %d/n",i,j);
char b[2]="2";
printf("%u/n",b[0]);
}
#include<stdio.h>
#include<string.h>
#include<ctype.h> //包含strcat()
int main()
{
//测试字符串
char *p = " 长度和坐标总是相差1,所以这里要加个1 有人可能会说那上面直接加2好了,我这样是为了逻辑清楚";
char temp[1000];
int n = strlen(p)-1;
printf("length:%d/n",n);
while(n > 0)
{
//不是字母或数字,不是标点,不是空格或其他制表符
if(!isalnum(*(p+n)) && !ispunct(*(p+n)) && !isspace(*(p+n)))
{
//原以为一个汉字是2个字符,看了strlen后发现是3个字符
n = n - 3;
//长度和坐标总是相差1,所以这里要加个1
//有人可能会说那上面直接减2好了,我这样是为了逻辑清楚
//见笑了
//一点一点和temp字符串结合起来
strncat(temp,p+n+1,3);
}
else
{
n = n - 1;
strncat(temp,p+n+1,1);
}
}
puts(p);
puts(temp);
}
A1:一个汉字2个字节 一个字符是1个字节
A2:printf("%d %d/n",(unsigned char)a[0],(unsigned char)a[1]);
A3:C/C++不支持Unicode,用的是ASCII,但是可以获取GB2312编码。
A4:在问题一得答案里已经告诉你了,一个汉字占2个字节 你想把一个汉字一半一半的输出时不可能的。所以给你的是??
A5:int的范围是-2^31~2^31 而unsigned int范围是-2^32~2^32(4394967296)
#include <stdio.h>
#include <string.h>
int main()
{
char S[2];
int a,b;
while(1)
{
printf("请输入一个汉字:");
scanf("%s",S);
a=(unsigned char)S[0],b=(unsigned char)S[1];
printf("%d %d/n",a,b);
printf("%c%c/n",a,b);
printf("%s/n",S);
}
return 0;
}