规则:如果标点符号前面有字母或文字,则根据前面的文字或字母,修改标点符号为全角或半角;如果标点符号前面没有文字或字母,则根据标点符号后面的文字或字母修改标点符号为全角或半角。
#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版权协议,转载请附上原文出处链接和本声明。