新手处女帖,请多关照,不喜勿喷!
本人学习的第一种编程语言为C++,这里以C++处理字符串为例,希望大家喜欢!
include <iostream
include <cstdio
include <cstring //这里加不了反尖括号,不知道为什么
using namespace std;
string m; ///将 mi 定义为一个字符串
struct n{
int T; ///处理 [] 内的整数(次数 )
string S; ///处理字符串
} a[30]; ///用变量a表示‘[’与‘]’的层数,由于正反括号数组开20就够了
int main() {
int d = 0; ///d表示层数
cin>>m;
for(int i=0; i<=m.size()-1; i++) ///字符串读入从 0 开始,循环时一定减 1
{
if(m[i]>='A' && m[i]<='Z') ///A~Z之间直接连其间字符串
{
a[d].S+=m[i]; ///连接N个字符串
}
else if(m[i]=='[') /// 若字符串内有 [
{
a[++d].S=""; ///将这一位上的‘[’清除 并且进入下一层 注意:一定是 ++d 不是 d++!
a[d].T=0; ///一定要归零 否则无法应对连续括号
}
else if(m[i]>='0' && m[i]<='9')
{
a[d].T=a[d].T10+m[i]-'0'; /// a[d].T10 处理高次位上的数
}
else if(m[i]==']')
{
for(int k=1; k<=a[d].T; k++) ///遇反括号 a[d].T 已是整形且等于输入的整数 循环!
{
a[d-1].S+=a[d].S; ///将括号内这一层的字符串循环 a[d].T 遍 并与括号外一层合并为一个字符串
}
d--; ///合并为一个字符串后 减少一层
}
}
cout<<a[0].S; ///输出第0层字符串
return 0;
}
|