Arduino 统计中文字符串中的中文标点符号数量
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino 统计中文字符串中的中文标点符号数量相关的知识,希望对你有一定的参考价值。
Arduino 统计中文字符串中的中文标点符号数量
- 坛友的的算法如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
// >B0 >A0 中文的范围
//<F7 <FF
//0xa1 0x40 符号
//0xa9 0xff 符号
char unsigned ch4[]={"、。。?!你好hello!;:;"};
printf("这句话中有多少个中文符号 %s",ch4);
i =0;int j,tem=0;
while(ch4[i]!='\\0')
{
j=i+1;
if(j=='\\0')
{
break;
}
else if(ch4[i]<=0xa9&&ch4[i]>=0xa1 )
{
if(ch4[j]>=0x40 &&ch4[j]<=0xff)
{
tem++;
}
i=i+2;
}
else
i++;
}
printf("\\n中文标点符号有%d个",tem);
return 0;
}
坛友的算法并不那么准确,对于遇到低位地址的单体字,很容易误判。
我的算法和坛友的算法一起计算,并打印输出结果
#include <Arduino.h>
unsigned char ch[] = "智者;学习;“知识”,上善若水。见善而怠,时至而疑,知非而处,此三者,道之所止也。";
String st = "智者;学习;“知识”,上善若水。见善而怠,时至而疑,知非而处,此三者,道之所止也。";
//不能判断连续的中文标点符号,例如“,,,,。,”
int ZH(unsigned char *ch4);
int libian(String str0);
void setup()
{
int num = 0;
int num2 = 0;
Serial.begin(115200);
Serial.println();
Serial.println("print:");
Serial.println(st);
Serial.println(st.length());
Serial.println();
num = ZH(ch);
Serial.printf("\\n中文标点符号有%d个", num);
num2 = libian(st);
Serial.printf("\\n中文标点符号有%d个", num2);
}
void loop()
{
}
int ZH(unsigned char *ch4)
{
int i = 0, j = 0, tem = 0;
while (ch4[i] != '\\0')
{
j = i + 1;
if (j == '\\0')
{
break;
}
else if ((ch4[i] <= 0xa9) && (ch4[i] >= 0xa1))
{
if ((ch4[j] >= 0x40) && (ch4[j] <= 0xff))
{
tem++;
}
i = i + 2;
}
else
i++;
}
return tem;
}
int libian(String str0)
{
int temp = 0;
String str = str0;
if (str.indexOf(',') != -1)
{
temp++;
str.replace(",", "");
}
if (str.indexOf(';') != -1)
{
temp++;
str.replace(";", "");
}
if (str.indexOf('。') != -1)
{
temp++;
str.replace("。", "");
}
if (str.indexOf('“') != -1)
{
temp++;
str.replace("“", "");
}
if (str.indexOf('”') != -1)
{
temp++;
str.replace("”", "");
}
Serial.println();
Serial.println(str);
Serial.println(str.length());
int jishu = (str0.length() - str.length()) / 3;
return jishu;
}
- 打印输出
以上是关于Arduino 统计中文字符串中的中文标点符号数量的主要内容,如果未能解决你的问题,请参考以下文章