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 统计中文字符串中的中文标点符号数量的主要内容,如果未能解决你的问题,请参考以下文章

在 Arduino 中重新声明为不同类型的符号

JAVA-文件操作与输入输出流

Arduino 在 uint32_t 和无符号字符之间转换

词频统计设计

显示Arduino OLED中的度数符号

ESP8266 WebServer如何流式传输无符号字符