字符串就是字符数组,可以定义一个char类型的数组来存储字符串。
如果要存储多个字符串则可以定义一个char类型的二维数组。
存储多个汉字字符串的话,可以考虑用char类型的二维数组。
不过要注意,一个汉字在内存中占用的字节数确实大于一个字符,具体是多少取决与编码格式。
UTF-8 编码:3个字节
GBK 编码: 2个字节
在定义存储汉字的字符串的数组时要注意留足空间,不然会报错,就像这段代码:
#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表示是字符串常量,其他操作与二维数组一样。如下:
#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;
}