如何将空格分隔的两位字符组存入数组的每个索引位置?
如何将字符串中的两位字符组存入数组的单个索引
你现在的问题是,字符串s2是类似'12 12 13 14'的格式,当前代码会把每个单独的字符(比如'1'、'2')存进MEM数组,但你需要把每两位作为一组(比如"12")存入数组的一个索引里,之后还要转成整数对吧?
首先看你原来的代码,它是逐个跳过空格后存单个字符,那我们需要调整逻辑,每次处理两个连续的非空格字符,把它们作为一个整体存到MEM的一个位置里。不过要注意,char类型的单个数组索引只能存一个字符,所以我们需要把MEM定义成字符串数组,或者直接在遍历过程中转成整数存入int数组,下面给你两种实用方案:
方案1:存为字符串数组(保留两位字符组)
如果需要先把两位字符组以字符串形式保留下来,后续再转整数,可以这样修改代码:
// 假设MEM定义为 char MEM[100][3]; 每个元素预留3个位置:两位字符+字符串结束符 int i = 0, j = 0; while (s2[i] != '\0') { // 跳过空格 if (s2[i] == ' ') { i++; continue; } // 将当前字符和下一个字符存入MEM的第j个元素 MEM[j][0] = s2[i]; MEM[j][1] = s2[i+1]; MEM[j][2] = '\0'; // 必须添加字符串结束符,否则后续转整数会出问题 // 指针移动:跳过当前处理的两位字符 i += 2; j++; }
这样MEM[0]就是"12",MEM[1]是"12",以此类推,后续可以用atoi(MEM[j])轻松转成整数。
方案2:直接转成整数存入int数组
如果不需要保留字符形式,直接存整数会更高效,省去后续转换步骤:
// 假设MEM定义为 int MEM[100]; int i = 0, j = 0; while (s2[i] != '\0') { if (s2[i] == ' ') { i++; continue; } // 把两位字符直接转成整数:字符转数字的核心是减去'0'的ASCII值 int num = (s2[i] - '0') * 10 + (s2[i+1] - '0'); MEM[j] = num; i += 2; j++; }
这个方案一步到位,MEM里直接存储12、12、13、14这些整数,后续可以直接使用。
额外提醒
- 要确保你的字符串
s2格式是严格的两位数字+空格(最后一组后面可以没有空格),如果存在单个数字的情况,需要额外加判断逻辑,避免数组越界访问。 - 定义
MEM时要预留足够的空间,防止溢出。
内容的提问来源于stack exchange,提问作者user7391306
相关产品推荐
相关产品推荐

