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;
}
相关推荐
我也不曾来过114 分钟前
list底层原理
数据结构·c++·list
农民也会写代码22 分钟前
dedecms织梦arclist标签noflag属性过滤多个参数
开发语言·数据库·sql·php·dedecms
内网渗透40 分钟前
Python 虚拟环境管理:venv 与 conda 的选择与配置
开发语言·python·conda·虚拟环境·venv
embedded_w44 分钟前
U8G2在PC端模拟(C语言版本)
c语言
每次的天空2 小时前
kotlin与MVVM结合使用总结(三)
开发语言·microsoft·kotlin
矛取矛求2 小时前
C++区别于C语言的提升用法(万字总结)
c语言·c++
mit6.8242 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify2 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
ephemerals__2 小时前
【c++11】c++11新特性(下)(可变参数模板、default和delete、容器新设定、包装器)
开发语言·c++
shix .2 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法