C_字符数组存储汉字字符串及其索引

字符串就是字符数组,可以定义一个char类型的数组来存储字符串。

如果要存储多个字符串则可以定义一个char类型的二维数组。

存储多个汉字字符串的话,可以考虑用char类型的二维数组。

不过要注意,**一个汉字在内存中占用的字节数确实大于一个字符,**具体是多少取决与编码格式。

UTF-8 编码:3个字节
GBK 编码: 2个字节

在定义存储汉字的字符串的数组时要注意留足空间,不然会报错,就像这段代码:

cs 复制代码
#include <stdio.h>
#include <math.h>

int main()
{
    int num, i, len;
    int wei[9];  // 数字的每一位存储在这里
    char wei_str[][6] = {"个", "十", "百", "千", "万", "十万", "百万", "千万", "亿"};
    printf("请输入一个整数:");
    scanf("%d", &num);

    // 计算数字的位数
    i = num;
    len = 0;
    while (i) 
    {
        len++;
        i /= 10;
    }

    printf("该数为%d位数\n",len);
    
    // 处理并打印每一位数字及其对应的位数
    for (int j = 0; j < len; j++) 
    {
        wei[j] = (int)(num / pow(10, j)) % 10;  // 获取每一位
        printf("%s位是%d\n",wei_str[j],wei[j]);
    }

    return 0;
}

错误如下: initializer-string for array of chars is too long -fpermissive

定义的字符数组的初始化字符串超出了数组的容量。

在这里"十万", "百万", "千万",在UTF-8编码下是6个字节,加上'\0'则需要7个字节。所以解决这个报错的方法就是将二维数组的第二个维度定义为7。如下:

而且二维数组的第二个维度必须定义,如果不想定义,可以考虑用另一种方式,用字符指针。如下:

并建议加上const表示是字符串常量,其他操作与二维数组一样。如下:

cs 复制代码
#include <stdio.h>
#include <math.h>

int main()
{
    int num, i, len;
    int wei[9];  // 数字的每一位存储在这里
    const char *wei_str[] = {"个", "十", "百", "千", "万", "十万", "百万", "千万", "亿"};
    printf("请输入一个整数:");
    scanf("%d", &num);

    // 计算数字的位数
    i = num;
    len = 0;
    while (i) 
    {
        len++;
        i /= 10;
    }

    printf("该数为%d位数\n",len);
    
    // 处理并打印每一位数字及其对应的位数
    for (int j = 0; j < len; j++) 
    {
        wei[j] = (int)(num / pow(10, j)) % 10;  // 获取每一位
        printf("%s位是%d\n",wei_str[j],wei[j]);
    }

    return 0;
}
相关推荐
龙亘川22 分钟前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人27 分钟前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
Raas1001 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
专注仿真2 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy12 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
呆呆虫123 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
2601_970703833 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心疼你的一切3 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
Zwawa4 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Wang's Blog4 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友