Kleine Frage: Zählen Sie die Anzahl gültiger Zeichen, die chinesische Zeichenfolgen enthalten

brauchen:

  • Implementieren Sie eine Kommentarfunktion. Der Kommentarinhalt ist auf 0-255 Zeichen begrenzt

In den oben genannten Anforderungen ist die Bemerkungsfunktion einfach zu implementieren. Die vom Benutzer eingegebenen Zeichen werden in der Datenbank gespeichert. Nachfolgende Benutzer müssen sie an den Benutzer in der Datenbank zurückgeben, um die obige Funktion zu realisieren. Aber wie kann man beurteilen, ob die aktuellen Der Kommentarinhalt überschreitet das Limit?

Die einfachste Idee besteht darin, strlen direkt zu verwenden, um die Länge der Zeichenfolge abzurufen, und dann zu bestimmen, ob die Länge 255 überschreitet. Natürlich ist diese Idee für Englisch kein Problem, aber wenn der Benutzer Chinesisch eingibt, z. B. strlen("中文" ) (Chinesisch unter Linux) Die Standardausgabelänge der Kodierung (UTF-8) beträgt 6, offensichtlich wird es Probleme geben.

Hier sind also tatsächlich ein wenig Programmierkenntnisse erforderlich. In UTF-8 verwenden wir standardmäßig 3 Bytes zum Speichern chinesischer Zeichen und 1 Byte zum Speichern englischer Zeichen. Wie beurteilen wir also, ob das aktuelle Byte chinesisch oder englisch ist? ?

Wir geben das höchste Bit des Bytes an, um Chinesisch oder Englisch zu unterscheiden

  • Wenn das höchste Bit dieses Bytes 0 ist, ist das aktuelle Zeichen ein englisches Zeichen

  • Wenn das höchste Bit dieses Bytes 1 ist, ist das aktuelle Zeichen ein chinesisches Zeichen

/**
 * @func: int get_string_len(char *str) 
 * @description: 获取 str 字符串中的有效字符长度,主要处理含中文情况
 * @param {char} *str
 * @return int 有效字符长度
 */
static int get_string_len(char *str) 
{
	int len = 0;
	for (int i = 0; i < strlen(str); ++i) {
		//判断当前位置是否为中文-按utf-8编码
		if (str[i] & 0x80) {
			i += 2;
		}
		++len;
	}
	return len;
}

Wenn in der obigen Code-Implementierung das höchste Bit des aktuellen Bytes 1 ist, muss dieses Byte chinesisch codiert sein, sodass drei Bytes übersprungen werden müssen.

Ich denke du magst

Origin blog.csdn.net/m0_64560763/article/details/132489590
Empfohlen
Rangfolge