Bluezzz 发表于 2020-2-15 12:00

C++ 字符串

新手处女帖,请多关照,不喜勿喷!
本人学习的第一种编程语言为C++,这里以C++处理字符串为例,希望大家喜欢!
#include<iostream
#include<cstdio
#include<cstring //这里加不了反尖括号,不知道为什么
using namespace std;

stringm; ///将 mi 定义为一个字符串

struct n{
      int T; ///处理 [] 内的整数(次数 )
      string S; ///处理字符串
} a; ///用变量a表示‘[’与‘]’的层数,由于正反括号数组开20就够了

int main() {
      int d = 0; ///d表示层数
      cin>>m;
      for(int i=0; i<=m.size()-1; i++) ///字符串读入从 0 开始,循环时一定减 1
      {
                if(m>='A' && m<='Z') ///A~Z之间直接连其间字符串
                {
                        a.S+=m; ///连接N个字符串
                }
                else if(m=='[') /// 若字符串内有 [
                {
                        a[++d].S=""; ///将这一位上的‘[’清除 并且进入下一层 注意:一定是 ++d 不是 d++!
                        a.T=0; ///一定要归零 否则无法应对连续括号
                }
                else if(m>='0' && m<='9')
                {
                        a.T=a.T*10+m-'0'; ///a.T*10处理高次位上的数
                }
                else if(m==']')
                {
                        for(int k=1; k<=a.T; k++) ///遇反括号a.T 已是整形且等于输入的整数 循环!
                        {
                              a.S+=a.S; ///将括号内这一层的字符串循环 a.T 遍 并与括号外一层合并为一个字符串
                        }
                        d--; ///合并为一个字符串后 减少一层
                }
      }
      cout<<a.S; ///输出第0层字符串
      return 0;
}

江沉晚吟时. 发表于 2020-2-15 14:30

感谢分享

WarWolf 发表于 2020-2-18 22:49

本帖最后由 WarWolf 于 2020-2-18 22:52 编辑

```
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

stringm; ///将 mi 定义为一个字符串

struct n
{
        int T; ///处理 [] 内的整数(次数 )
        string S; ///处理字符串
} a; ///用变量a表示‘[’与‘]’的层数,由于正反括号数组开20就够了

int main()
{
        int d = 0; ///d表示层数
        cin >> m;
        for(int i = 0; i <= m.size() - 1; i++) ///字符串读入从 0 开始,循环时一定减 1
        {
                if(m >= 'A' && m <= 'Z') ///A~Z之间直接连其间字符串
                {
                        a.S += m; ///连接N个字符串
                }
                else
                        if(m == '[') /// 若字符串内有 [
                        {
                                a[++d].S = ""; ///将这一位上的‘[’清除 并且进入下一层 注意:一定是 ++d 不是 d++!
                                a.T = 0; ///一定要归零 否则无法应对连续括号
                        }
                        else
                                if(m >= '0' && m <= '9')
                                {
                                        a.T = a.T + m - '0'; ///a.T10处理高次位上的数
                                }
                                else
                                        if(m == ']')
                                        {
                                                for(int k = 1; k <= a.T; k++) ///遇反括号a.T 已是整形且等于输入的整数 循环!
                                                {
                                                        a.S += a.S; ///将括号内这一层的字符串循环 a.T 遍 并与括号外一层合并为一个字符串
                                                }
                                                d--; ///合并为一个字符串后 减少一层
                                        }
        }
        cout << a.S; ///输出第0层字符串
        return 0;
}

```#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

stringm; ///将 mi 定义为一个字符串

struct n
{
      int T; ///处理 [] 内的整数(次数 )
      string S; ///处理字符串
} a; ///用变量a表示‘[’与‘]’的层数,由于正反括号数组开20就够了

int main()
{
      int d = 0; ///d表示层数
      cin >> m;
      for(int i = 0; i <= m.size() - 1; i++) ///字符串读入从 0 开始,循环时一定减 1
      {
                if(m >= 'A' && m <= 'Z') ///A~Z之间直接连其间字符串
                {
                        a.S += m; ///连接N个字符串
                }
                else
                        if(m == '[') /// 若字符串内有 [
                        {
                              a[++d].S = ""; ///将这一位上的‘[’清除 并且进入下一层 注意:一定是 ++d 不是 d++!
                              a.T = 0; ///一定要归零 否则无法应对连续括号
                        }
                        else
                              if(m >= '0' && m <= '9')
                              {
                                        a.T = a.T + m - '0'; ///a.T10处理高次位上的数
                              }
                              else
                                        if(m == ']')
                                        {
                                                for(int k = 1; k <= a.T; k++) ///遇反括号a.T 已是整形且等于输入的整数 循环!
                                                {
                                                      a.S += a.S; ///将括号内这一层的字符串循环 a.T 遍 并与括号外一层合并为一个字符串
                                                }
                                                d--; ///合并为一个字符串后 减少一层
                                        }
      }
      cout << a.S; ///输出第0层字符串
      return 0;
}

Bluezzz 发表于 2020-2-19 07:55

WarWolf 发表于 2020-2-18 22:49
```
#include
#include


感谢编辑排版{:1_919:}

碧天澈水 发表于 2020-2-19 12:47

支持一下
页: [1]
查看完整版本: C++ 字符串