全角半角字符替换

规则:如果标点符号前面有字母或文字,则根据前面的文字或字母,修改标点符号为全角或半角;如果标点符号前面没有文字或字母,则根据标点符号后面的文字或字母修改标点符号为全角或半角。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
/*
* 函数介绍;根据规则修改标点符号
* 输入参数:char *
* 输出参数:
* 返回值:
*/
int change(char* pchar)
{
	char ppchar[1024];
	strcpy_s(ppchar, pchar);
	cout << "pchar:" << pchar << endl;
	cout << "ppchar:" << ppchar << endl;
	cout << "strlen(ppchar):" << strlen(ppchar) << endl;
	int i = 0;
	int j = 0;
	unsigned char uc = 0, ucpre = 0, ucnext = 0;
	cout << "strlen(pchar):" << strlen(pchar) << endl;
	//char ch[1024] = { 0 };
	char* ch = (char*)malloc(1024);
	char* temp = ch;
	memset(ch, 0x00, 1024);
	if (strlen(ppchar) < 2)
	{
		return 0;
	}
	for (i = 0; i < strlen(ppchar); i++)
	{
		uc = (unsigned char)ppchar[i];
		//uc = ppchar[i];
		ucpre = ucnext = 0;
		if (i > 0)
		{
			ucpre = (unsigned char)ppchar[i - 1];
		}
		if (i < strlen(ppchar) - 1)
		{
			ucnext = (unsigned char)ppchar[i + 1];
		}
		if (uc <= 128)//英文
		{
			if (uc >= 0x20 && uc < 0x30 || uc > 0x39 && uc < 0x41)//英文标点符号
			{
				if (ucpre)//标点前面有东西
				{
					if (ucpre > 128)//中文
					{
						//标点符号修改
						if (uc == ' ')//空格(uc == 0x20)
						{
							cout << "英文空格——修改" << endl;
							cout << "ppchar:" << i << "= " << ppchar[i] << endl;
							//strncpy(ch, ppchar, i);
							printf("pchar + %d = '%c'\n", i, *(pchar + i));
							*ch = 0xA1;
							++ch;
							*ch = 0xA1;
							++ch;
							//strcat(ch, " ");//中文空格
							//ch += strlen(" ");
						}
						else
						{
							cout << "英文标点符号——修改" << endl;
							cout << "ppchar:" << i << "= " << ppchar[i] << endl;
							*ch = 0xA3;
							++ch;
							*ch = ppchar[i] + 0x80;
							++ch;
						}
					}
					else//英文
					{
						//英文标点符号照抄
						cout << "英文标点符号——照抄" << endl;
						cout << "ppchar:" << i << "内容:" << ppchar[i] << endl;
						*ch = *(pchar + i);
						++ch;
					}
				}
				else//标点前面没东西
				{
					if (ucnext > 128)//中文
					{
						//标点符号修改
						if (uc == ' ')//空格(uc == 0x20)
						{
							//cout << "英文空格——修改" << endl;
							//cout << "ppchar:" << i << "= " << ppchar[i] << endl;
							*ch = 0xA1;
							++ch;
							*ch = 0xA1;
							++ch;
						}
						else
						{
							//cout << "英文标点符号——修改" << endl;
							//cout << "ppchar:" << i << "= " << ppchar[i] << endl;
							*ch = 0xA3;
							++ch;
							*ch = ppchar[i] + 0x80;
							++ch;
						}
					}
					else//英文
					{
						//英文标点符号照抄
						//cout << "英文标点符号——照抄" << endl;
						//cout << "ppchar:" << i << "内容:" << ppchar[i] << endl;
						*ch = *(pchar + i);
						++ch;
					}
				}
			}
			else//英文字母——照抄
			{
				cout << "英文字母——照抄" << endl;
				cout << "ppchar:" << i << "内容:" << ppchar[i] << endl;
				*ch = *(pchar + i);
				//cout << "ch:" << *ch << endl;
				ch++;
			}
		}

		else//中文
		{
			//if (uc >= 0xA3A0 && uc < 0xA3B0 || uc > 0xA3B9 && uc < 0xA3C1)//中文标点符号
			//if(uc=0xA3 &&(ucnext>=0xA0 && ucnext<0xB0 || ucnext>0xB9 &&ucnext<0xC1))
			if(ucnext >= 0xA0 && ucnext < 0xB0 || ucnext>0xB9 && ucnext < 0xC1)//中文标点符号
			{
				cout << "11111" << endl;
				if (ucpre)//标点前面有东西
				{
					if (ucpre < 128)//英文
					{
						//标点符号修改
						//if (uc == 0xA3A0)//空格(uc == 0xA1A1)
						if(ucnext==0xA0)
						{
							cout << "中文空格——修改" << endl;
							cout << "ppchar:" << i << "= " << ppchar[i] << ppchar[i + 1] << endl;
							*ch = 0x20;
							++ch;
							i++;
						}  
						else
						{
							cout << "中文标点符号——修改" << endl;
							cout << "ppchar:" << i << "= " << ppchar[i] << ppchar[i + 1] << endl;
							//*ch = 0xA3;
							//++ch;
							*ch = ppchar[i+1] - 0x80;
							++ch;
							i++;
						}

					}

					else//中文
					{
						//标点符号照抄
						cout << "中文标点符号——照抄" << endl;
						cout << "ppchar:" << i << "内容:" << ppchar[i] << ppchar[i + 1] << endl;
						*ch = ppchar[i];
						++ch;
						*ch = ppchar[i+1];
						++ch;
						i++;
					}
				}
			}
			else//中文——照抄
			{
				cout << "中文汉字——照抄" << endl;
				cout << "ppchar:" << i << "内容:" << ppchar[i] << ppchar[i+1] << endl;
				*ch = ppchar[i];
				++ch;
				*ch = ppchar[i+1];
				++ch;
				i++;

				//*ch += pchar.substr(i, 2);
				//i++;
			}
		}

	}

	cout << "ch=" << temp << endl;
}

int main()
{
	char* a = "啦a,b。c】d e无.g啦";
	change(a);
	return 0;
}

运行结果:
在这里插入图片描述


版权声明:本文为weixin_50477133原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。