zip函数是怎样将重复的字符化成一个数字字符(重复的个数)加一个字符(重复的),就是如果输入‘111’(四个字符)它是怎样输出‘31’(两个字符)的,是怎么由输入3个字符只输出两个字符。求解答详细。谢谢😊。
请帮我解释一下,我不知道怎么回事。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2022-10-10 11:19关注
while( *p == *(p+n)) n++;这一句统计连续出现的字符个数。写个例子来给你描述过程。
举例执行过程如下:假设输入的字符串是1112222 p和q开始都指向字符串的第一个位置, while (*p != '\0')这里遍历整个字符串 n = 1; 每次统计字符个数的时候重置为1 while (*p == *(p + n)) n++; 这里的执行过程为: * p 为'1', * (p + 1)也是'1',n++,n变为2 * p 为'1', * (p + 2)也是'1',n++,n变为3 * p 为'1', * (p + 3)是'2',循环结束,也就是'1'的个数为3 执行 else if (n >= 2)代码块:* q++ = n + '0'; q初始指向'1',n + '0' = '3',所以这句代码把原来的字符串修改为:3112222 然后q 后移1位,q执行字符串的第二个位置 执行 * q++ = *(p + n - 1);执行过程为: *q = *(p+3-1),此时,q指向字符串第二个位置,p还是指向开始的位置,这句话的作用就是把本次统计的字符放在字符串的第二个位置, 字符串变为: 3112222 q++,q指向字符串的第三个位置; p= p+n,p移动3位,此时指向字符'2',然后重新开始累计。 while (*p == *(p + n)) n++; 这里的执行过程为: * p 为'2', * (p + 1)也是'2',n++,n变为2 * p 为'2', * (p + 2)也是'2',n++,n变为3 * p 为'2', * (p + 3)也是'2',n++,n变为4 * p 为'2', * (p + 4)是'3',循环结束,也就是'2'的个数为4 执行 else if (n >= 2)代码块:* q++ = n + '0'; q指向字符串的第三个位置'1',n + '0' = '4',所以这句代码把原来的字符串修改为:3142222 然后q 后移1位,q执行字符串的第四个位置 执行* q++ = *(p + n - 1); 执行过程为: * q = *(p + 4 - 1), 此时,q指向字符串第四个位置,p+3指向了最后一个'2',这句话的作用就是把本次统计的字符'2'放在字符串的第四个位置, 字符串变为 : 3142222 q++,q指向字符串的第五个位置; p = p + n,p移动3位,此时指向字符串的末尾'\0',此时while(*p != '\0')不成立,循环结束 执行*q = '\0',也就是把字符串的第五位设为'\0',来让字符串正确结束,字符串变为:3142
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
- ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
- ¥15 关于#java#的问题,请各位专家解答!
- ¥15 如何卸载arcgis 10.1 data reviewer for desktop
- ¥15 共享文件夹会话中为什么会有WORKGROUP
- ¥15 关于#python#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
- ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据
- ¥15 在matlab中Application Compiler后的软件无法打开
- ¥15 想问一下STM32创建工程模板时遇到得问题
- ¥15 Fiddler抓包443