【题目链接】
ybt 1145:字符串p型编码
OpenJudge NOI 1.7 31:字符串p型编码
【题目考点】
1. 字符串处理
【解题思路】
遍历字符串,设置变量curNum表示当前关注的数字字符。如果遍历到的字符与curNum相同,那么计数变量ct加1,如果不同,那么输出当前关注的数字,以及其数量,而后关注下一个数字字符,此时已经看了一个新的字符了,计数变量ct变为1。遍历时,for循环内的条件写为i<=len,那么i会一直增大到len,len为字符串长度。这样当i为len时,s[i]为’\0’,一定与字符0~9不同,那么此时就会将最后一段统计的数字及其数量输出出来。如果for循环的条件只写为i < len,那么i只遍历到len-1,那么还得在循环外面再输出最后一段统计的数字及数量。【题解代码】
解法1:i遍历到len
#include<bits/stdc++.h>using namespace std;int main(){char s[1005], curNum;//curNum:当前数字 int ct = 0, len; cin >> s;len = strlen(s);curNum = s[0];for(int i = 0; i <= len; ++i)//当i为len时,s[i]为'\0'一定不等于字符1~9{if(s[i] == curNum)ct++;else{cout << ct << curNum;curNum = s[i];ct = 1;}}return 0; }
解法2:i遍历到len-1
#include<bits/stdc++.h>using namespace std;int main(){char s[1005], curNum;//curNum:当前数字 int ct = 0, len; cin >> s;len = strlen(s);curNum = s[0];for(int i = 0; i < len; ++i){if(s[i] == curNum)ct++;else{cout << ct << curNum;curNum = s[i];ct = 1;}}cout << ct << curNum;//输出最后一个数字的数量及是哪个数字return 0; }