P1098 字符串的展开 题解

Raileight

2018-12-18 16:04:48

Solution

# P1098 字符串的展开 题解 **1.只有P1对最后的输出有实质性影响,P2和P3最后在输出过程加个循环或是倒着循环就行 ** **2. 采取边处理边输出的策略** **3.玄学判断是否数字,字母** **4.具体内容看注释** ------------ ```cpp #include<iostream> using namespace std; string s; int p[10]; void f(int n) { if(p[1] != 3 && s[n - 1] < s[n + 1]) { if(p[3] == 1)//正序 且 输出字符 { for(char j = s[n - 1] + 1 ; j < s[n + 1] ; j = j + 1)//只输出至后字母的前一位 { for(int k = 1 ; k <= p[2] ; ++k)//控制重复次数 { p[1] == 1 ? cout<<j : cout<<char(toupper(j));//是否大写 } } } else//逆序 { for(char j = s[n + 1] - 1 ; j > s[n - 1] ; j = j - 1)//只输出至后字母的前一位 { for(int k = 1 ; k <= p[2] ; ++k)//控制重复次数 { p[1] == 1 ? cout<<j : cout<<char(toupper(j));//是否大写 } } } } else if(s[n - 1] < s[n + 1])//输出* { for(char j = s[n - 1] + 1 ; j < s[n + 1] ; j = j + 1) { for(int k = 1 ; k <= p[2] ; ++k) { cout<<'*'; } } } else//前字母大于后字母 ,前数字大于后数字 { cout<<'-'; } } int main() { cin>>p[1]>>p[2]>>p[3]>>s; p[4] = 1; for(int i = 0 ; i < s.length() ; ++i) { if(s[i] != '-' || i == 0 || i == s.length() - 1) cout<<s[i];//不是“-” else if(((s[i - 1] >= '0' && s[i - 1] <= '9') && (s[i + 1] >= '0' && s[i + 1] <= '9')) || ((s[i - 1] >= 'a' && s[i - 1] <= 'z') && (s[i + 1] >= 'a' && s[i + 1] <= 'z')) ) { f(i);//是“-”,而且两边都是数字,或,两边都是字母 } else { cout<<s[i];//两边类型不对应 } } return 0; } ```