如何使用C来限制SubString、Limit? [关闭]

2024-05-03

第1节

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

int main(int argc, char **argv)
{
    static const unsigned char text[] = "000ßh123456789";
    int32_t current=1;
    int32_t text_len = strlen(text)-1;
    /////////////////////////////////
    printf("Result : %s\n",text);
    /////////////////////////////////
    printf("Lenght : %d\n",text_len);
    /////////////////////////////////
    printf("Index0 : %c\n",text[0]);
    printf("Index1 : %c\n",text[1]);
    printf("Index2 : %c\n",text[2]);
    printf("Index3 : %c\n",text[3]);//==> why show this `�`?
    printf("Index4 : %c\n",text[4]);//==> why show this `�`?
    printf("Index0 : %c\n",text[5]);
    /////////////////////////////////
    return 0;
}

why text[3] and text[4] show ?

怎么也支持utf-8字符Index?


第#2节

我想写一个像这样的函数mb_substr in php.

(verybigstring or string)mb_substr ((verybigstring or string)输入 ,(verybigint or int)开始 [,(verybigint or int)$长度=空])

一些例子:

  • mb_substr("你好世界",0);

    ==>hello world

  • mb_substr("你好世界",1);

    ==>ello world

  • mb_substr_two("你好世界",1,3);

    ==>el

  • mb_substr("你好世界",-3);

    ==>rld

  • mb_substr_two("你好世界",-3,2);

    ==>rldhe

我的问题是第 1 节

有人可以帮助我吗?(请)


The Unicode https://en.wikipedia.org/wiki/Unicode字符集当前包含超过 128,000 个字符(我将在下文中将其称为代码点以避免混淆),并为更多字符保留空间。因此,一个char在现代通用计算机上只有 8 位大小,不能用于包含代码点。

UTF-8 https://en.wikipedia.org/wiki/UTF-8是将这些代码点编码为字节的一种方法。以下是您放入的字节text[](假设使用 UTF-8 来编码代码点)以及它们代表的内容:

i:             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
text[i]:    0x30 30 30 C3 9F 68 31 32 33 34 35 36 37 38 39 00
              -- -- -- ----- -- -- -- -- -- -- -- -- -- -- --
Code Point: U+30 30 30    DF 68 31 32 33 34 35 36 37 38 39  0
Graph:         0  0  0     ß  h  1  2  3  4  5  6  7  8  9

如您所见,UTF-8 是一种可变宽度编码。单个代码点编码为可变数量的字节。这意味着您无法在不扫描数组的情况下将“indexes-into-text”转换为“indexes-into-array-of-bytes”。

使用 UTF-8 编码的代码点以

0b0xxxxxxx    Represents an entire Code Point
0b110xxxxx    The start of a 2-byte sequence
0b1110xxxx    The start of a 3-byte sequence
0b11110xxx    The start of a 4-byte sequence

您在 UTF-8 中遇到的唯一其他形式的字节是

0b10xxxxxx    A continuation byte (the 2nd, 3rd or 4th byte of sequence)

A simple way to find the nth Code Point in a string (if you assume the input is valid UTF-8) is to search for the nth char for which (ch & 0xC0) != 0xC0 is true. You can use the same approach to count the number of Code Points in a string.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用C来限制SubString、Limit? [关闭] 的相关文章

随机推荐

  • constexpr 函数及其参数

    constexpr int hello int j return j 12 constexpr int bye int j 6 return j 12 int main int i 6 constexpr int a1 hello i er
  • 能够重置使用 Yield 生成的 IEnumerator (C#)

    如果我使用yield而不是手动创建IEnumerator 是否可以实现IEnumerator Reset 不 这是不可能的 当 C 编译器处理迭代器 包含迭代器的方法 时yield语句 编译器生成一个实现 IEnumerable 和 IEn
  • 良好的客户端套接字池

    我需要管理从我的 Java 应用程序到外部服务器的长时间运行的 TCP 套接字连接 我正在寻找一个好的套接字池 这样我就可以重复使用套接字 有什么建议吗 你可以看看在上面建立一个套接字池公共池 http commons apache org
  • 计算产生相同 BST 的唯一节点序列的数量

    问题 给定一个最多 50 个整数的特定序列 它们代表 某个二叉搜索树 BST 的节点 有多少种排列 这个序列在那里 这也会产生完全相同的 空白石板时间 将原始序列作为 1 个序列包含在总计数中 例如 对于这样的序列 5 2 1 9 8 答案
  • 如何从现有的远程分支创建本地分支?

    我想从现有的远程分支 假设是远程 A 创建一个分支 然后将更改提交到存储库 我已使用以下命令从现有的远程 A 创建本地分支 git checkout remote A git branch master remote A 现在我已经使用以下
  • “访问此资源所需的证书无效”

    XMLHttpRequest Network Error 0x800c0019 Security certificate required to access this resource is invalid 我已经找到解决方案了 首先 我
  • 错误:安装 ffi 时出错:错误:无法构建 gem 本机扩展

    我在 Mac 64 位系统中遇到此错误 并且机器上安装了 xcode Building native extensions This could take a while ERROR Error installing ffi ERROR F
  • 处理 UIPageControl 有太多点而无法全部显示在屏幕上的最佳方法是什么

    我的应用程序中有一个 UIPageControl 大约有 10 个页面 点 看起来非常完美 但是用户可以添加许多不同的视图 因此点的数量可能会变成 30 个 发生这种情况时 点就会从屏幕边缘消失 并且您始终无法看到当前选定的页面 这一切看起
  • Python请求响应以utf-8编码但无法解码

    我正在尝试使用 python 抓取我的messenger com facebook Messenger 聊天记录 并且我使用谷歌浏览器开发工具来查看聊天历史记录的 POST 请求 并且我已将整个标头和正文复制为请求可以使用的格式 我得到 H
  • Java:无法从未命名的模块读取包?

    在将项目转移到 Gradle 时 我停止使用 org json 的自定义构建 该构建安装了 module info java 以符合模块系统 现在 我通常通过 Maven 使用它 并且由于 org json 默认情况下不是一个模块 因此它被
  • 这段汇编语言代码是什么意思?

    我是一名学生 刚刚开始学习汇编语言 为了更好地理解它 我只是用 C 写了一个简短的代码并将其转换为汇编语言 奇怪的是我有点听不懂 代码是 include
  • 如何在 C 应用程序中将鼠标光标设置在 X11 上

    我有一个相当大且相当旧的 C 应用程序 已移植到 Linux 上 我负责让鼠标光标正常工作 但遇到一些问题 我能够将我们需要的大部分光标转换为使用提供的标准光标X字体光标 http tronche com gui x xlib append
  • 可以在 .h 文件中声明静态全局变量吗?

    static 关键字将全局变量的范围限制为该翻译单元 如果我使用static int x在 h 文件中并包含该 h 文件每隔一个文件 它们不会都属于同一个翻译单元吗 那么 x不是到处可见吗 那么现在static有什么作用呢 另外 有没有什么
  • python RuntimeError:字典在迭代期间更改了大小

    我有这样的 obj hello world foo 0 bar v1 foo 0 name v2 foo 1 bar v3 它应该扩展到 hello world foo bar v1 name v2 bar v3 我在下面写了代码 按 删除
  • 测试 AngularJS 指令的焦点

    如何测试 AngularJS 指令中的焦点 我希望以下内容能够发挥作用 describe focus test function it should focus element function var element
  • 创建自定义 json 转换器来屏蔽敏感信息

    我正在编写一个自定义 json 转换器 它将序列化一个对象并屏蔽包含一些敏感信息的某些字段 我已经创建了转换器 但是当我使用转换器序列化对象时 我得到一个空字符串 有人可以告诉我我做错了什么吗 public class Student pu
  • 如何在python中查找csv文档中的特定行

    我想要做的是读入 csv 文档并找到 SN 列 gt 20 中的所有值 然后创建一个仅包含 SN gt 20 行的新文件 我知道我需要做 阅读原始文件 打开一个新文件 迭代原始文件的行 我能够做的是找到 SN gt 20 的行 import
  • 使用 SingleChildScrollView 时无法向下拖动底部工作表

    我创建了一个带有bottomsheet 和listview builder 的应用程序 在底部 有一个文本按钮 当我将其向上拖动时 底部工作表必须出现 底页上有一张表格 我用 SingleChildScrollView 包裹底部纸张 但是当
  • 如何在屏幕上动态移动 Textview? (框架布局)

    我有一个应用程序 可以在屏幕上的 FrameLayout 上显示相机视图 屏幕处于固定风景模式 我需要编写一个带有动态确定的屏幕坐标的textView 坐标以百分比确定 例如 将文本视图写入屏幕坐标 x 80 y 20 屏幕上 将文本视图写
  • 如何使用C来限制SubString、Limit? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 第1节 include