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;
}
相关推荐
菜择贰4 小时前
B树的性质和查找、插入、删除操作
数据结构·b树
LDR0065 小时前
接口焦虑终结者:LDR6020 芯片如何重新定义 Type-C 拓展坞与多设备互联时代
数据结构·经验分享·智能音箱
W.A委员会5 小时前
JS原型链详解
开发语言·javascript·原型模式
止语Lab5 小时前
Go并发编程实战:Channel 还是 Mutex?一个场景驱动的选择框架
开发语言·后端·golang
她说彩礼65万5 小时前
C# 实现简单的日志打印
开发语言·javascript·c#
绿浪19845 小时前
c# 中结构体 的定义字符串字段(性能优化)
开发语言·c#
房开民6 小时前
可变参数模板
java·开发语言·算法
t***5446 小时前
如何在现代C++中更有效地应用这些模式
java·开发语言·c++
_深海凉_6 小时前
LeetCode热题100-最小栈
java·数据结构·leetcode
itman3017 小时前
C语言、C++与C#深度研究:从底层到现代开发演进全解析
c语言·c++·c·内存管理·编译模型