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;
}
相关推荐
柯南二号11 分钟前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
一只鱼^_24 分钟前
牛客周赛 Round 105
数据结构·c++·算法·均值算法·逻辑回归·动态规划·启发式算法
我是哈哈hh30 分钟前
【Node.js】ECMAScript标准 以及 npm安装
开发语言·前端·javascript·node.js
Sammyyyyy2 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
指针满天飞2 小时前
Collections.synchronizedList是如何将List变为线程安全的
java·数据结构·list
洋曼巴-young2 小时前
240. 搜索二维矩阵 II
数据结构·算法·矩阵
丑小鸭是白天鹅3 小时前
嵌入式C语言学习笔记之枚举、联合体
c语言·笔记·学习
William一直在路上3 小时前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习3 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前3 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程