C语言如何实现字符串数组的纵向逐列打印输出
字符串数组纵向逐列打印实现方法
你之前写的单字符串纵向打印,核心是遍历单个字符串的每个索引位,逐行输出对应字符。要实现多字符串同索引字符拼接为单行的效果,只需要调整循环层级,加一层遍历字符串数组的逻辑即可。
核心逻辑
- 外层循环控制列索引,也就是字符在所属字符串里的位置,从0开始计数,循环上限取所有待打印字符串的最大长度,避免访问短字符串的越界内存
- 内层循环遍历数组里的每一个字符串,输出当前列索引对应的字符
- 每遍历完一列(内层循环结束),打印换行符开始下一行输出
通用兼容不同长度字符串的实现代码
#include <stdio.h> #include <string.h> int main() { char listOfTest[2][10] = {"testing1", "quizzing"}; // 计算数组内字符串总数 int strCount = sizeof(listOfTest) / sizeof(listOfTest[0]); // 找到最长字符串的长度,作为外层循环的上限 int maxLen = 0; for (int i = 0; i < strCount; i++) { int curLen = strlen(listOfTest[i]); maxLen = curLen > maxLen ? curLen : maxLen; } // 逐列拼接打印 for (int col = 0; col < maxLen; col++) { for (int strIdx = 0; strIdx < strCount; strIdx++) { // 仅当当前字符串长度覆盖当前列索引时输出字符,避免越界 if (col < strlen(listOfTest[strIdx])) { printf("%c", listOfTest[strIdx][col]); } // 如果需要对齐输出,短字符串缺失的位置可以补空格,放开下面注释即可 // else { // printf(" "); // } } printf("\n"); } return 0; }
固定长度场景简化写法
如果你能确定数组里所有字符串长度完全一致,可以省略长度计算和越界判断,直接按固定长度循环即可。针对你给出的示例场景,简化代码如下:
#include <stdio.h> int main() { char listOfTest[2][10] = {"testing1", "quizzing"}; // 按示例字符串实际长度设置循环上限即可得到预期输出 for (int col = 0; col < 7; col++) { printf("%c%c\n", listOfTest[0][col], listOfTest[1][col]); } return 0; }
以上代码编译运行后,输出结果和你给出的预期效果完全匹配。
内容的提问来源于stack exchange,提问作者LearningLinux
相关产品推荐
相关产品推荐

