C语言 全角半角 测试
Posted 流星蝴蝶没有剑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 全角半角 测试相关的知识,希望对你有一定的参考价值。
很久没有见到这个问题了
C语言 全角半角
1. 全角是什么?
2. 半角是什么?
#include<stdio.h>
#include<ctype.h>
#include<string.h>
// 这两个是全角半角切换的函数
// 下面就是把一个占用一个字节的字符转为占用两个字节的字符
void quan_to_ban(char quan[], char *ban); // 全--半角 *ban *quan 这玩意是指针
void ban_to_quan(char ban[], char *quan); // 半--全角
// 因为汉字占用两个字节,所以全角半角汉字都一样
//汉字对应的ASCLL:https://blog.csdn.net/qq_44009311/article/details/86650341
/*下面最好对着运行结果理解 */
int main()
int i;
/*1. 测试*/
printf("\\161\\n"); // 直接输出半角字符
printf("%d %d\\n", '\\161', 'q'); // 他们的数值是一样的,这个同ASCII一样是有字典的 ,你可以自己写个循环打印
printf("半角[%s]的长度为:%d\\n", "\\161", strlen("\\161")); // 先看看半角的长度
// 把 "\\161" 转为全角试试
char q[100];
ban_to_quan("\\161", q);
printf("全角[%s]的长度为:%d\\n", q, strlen(q)); // 在看看全角的长度
puts("\\n\\n");
/*2. 半角转全角*/
char s_ban1[] = "q r s";
char s_quan1[100]; // 这个大小最少要 strlen(s)*2,因为通过a的长度可以看出全角是半角的2倍。一般给他的三四倍,多余也没事,起码不会出现段错误
ban_to_quan(s_ban1, s_quan1);
printf("[%s]转为全角[%s]\\n", s_ban1, s_quan1); // s转为t,你会发现打印出来的字母和空格,空格的距离会变得很远,这就是全角
for(i=0; i<strlen(s_quan1); i+=2) // 打印的时候需要两个字符连在一起【同打印汉字】
printf("%c%c,", s_quan1[i],s_quan1[i+1]);
puts("\\n\\n");
/*3. 全角转半角*/
// ***切换输入法为全角模式,再重新赋值【输入法菜单栏一般会有月亮,太阳是全角,月亮是半角[默认:shift+空格]】
char s_quan2[] = "q r s"; // 从样式就可以看出全角半角区别吧
char s_ban2[100];
quan_to_ban(s_quan2, s_ban2); // s_quan2转为半角,返回到 s_ban2中
printf("[%s]转为半角[%s]\\n", s_quan2, s_ban2);
return 0;
/**/
//全角转半角 quan --> ban, ban通过指针返回
void quan_to_ban(char quan[], char *ban)
for(; *quan; ++quan) // 循环替换
if((*quan & 0xff) == 0xA1 && (*(quan + 1) & 0xff) == 0xA1) //全角空格
*ban++ = 0x20;
++quan;
else if((*quan & 0xff) == 0xA3 && (*(quan + 1) & 0xff) >= 0xA1 && (*(quan + 1) & 0xff) <= 0xFE) //ASCII码中其它可显示字符
*ban++ = *++quan - 0x80;
else
if(*quan < 0) //中文占用两个字节
*ban++ = *quan++;
*ban++ = *quan;
*ban = '\\0'; // 最后一个要结尾符
//半角转全角
//输入半角字符串ban,返回全角字符串*quan
void ban_to_quan(char ban[], char *quan)
for(; *ban; ++ban) // 循环替换
if((*ban & 0xff) == 0x20) //半角空格
*quan++ = 0xA1;
*quan++ = 0xA1;
else if((*ban & 0xff) >= 0x21 && (*ban & 0xff) <= 0x7E)
*quan++ = 0xA3;
*quan++ = *ban + 0x80;
else
if(*ban < 0) //中文占用两个字节
*quan++ = *ban++;
*quan++ = *ban;
*quan = '\\0'; // 最后一个要结尾符
以上是关于C语言 全角半角 测试的主要内容,如果未能解决你的问题,请参考以下文章