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语言 全角半角 测试的主要内容,如果未能解决你的问题,请参考以下文章

输入法全角空格和半角空格的区别

网页和自然语言处理中的字符问题(半角和全角)

全角半角怎么切换

全角和半角怎么切换 全角和半角切换方法

java全角转半角

全角和半角字符是啥意思呢?