• 使用堆栈处理字符串


    【题目要求】输入若干串字符,每次遇到换行符’\n’时,则输出本行当前处理结果。输入时以“#”字符作为结束符,当遇到这个符号后,意味着字符串输入结束。 在输入过程中如果输入“<”,则表示回退一格;在输入过程中如果包含了“@”,则表示回退到本行行首。

    【提示】 (1)这道题目利用定义的Stack类实现。输入字符时不要采用cin>>ch;的方式接收字符串,因为cin会屏蔽换行符,不能达到预期的效果。可以考虑采用ch=getchar();或cin.get();语句接收字符。在处理字符串时,要分别对’<’,’@’,’#’,’\n’进行不同的处理。 (2)可以在Stack类中增加两个成员函数,方便调用和显示: void displayFromBottom();//从栈底到栈顶显示栈中的元素。

    1. #include
    2. using namespace std;
    3. class Stack {
    4. private:
    5. int size;
    6. char* stackArray;
    7. int top;
    8. public:
    9. Stack(int s) {
    10. size = s;
    11. stackArray = new char[size];
    12. top = -1;
    13. }
    14. void push(char c) {
    15. stackArray[++top] = c;
    16. }
    17. void pop() {
    18. if (isEmpty()) {
    19. cout<<"堆栈为空,无法弹出"<
    20. }
    21. else{
    22. top--;
    23. }
    24. }
    25. char topElement() {
    26. if (isEmpty()) {
    27. throw "堆栈为空。";
    28. }
    29. return stackArray[top];
    30. }
    31. bool isEmpty() {
    32. if(top>-1)
    33. return false;
    34. else
    35. return true;
    36. }
    37. void displayFromBottom() {
    38. if(!isEmpty()){
    39. for (int i = 0; i <= top; i++) {
    40. cout << stackArray[i];
    41. }
    42. cout << endl;
    43. }
    44. else
    45. cout<<"栈为空"<
    46. }
    47. void setNull() {
    48. top=-1;
    49. }
    50. };
    51. int main() {
    52. int stackSize;
    53. cout << "输入栈的大小:";
    54. cin >> stackSize;
    55. Stack myStack(stackSize);
    56. getchar();//清除换行符
    57. cout << "输入待处理的字符串(输入<代表退一格,输入@代表清除到行首,输入#结束):"<
    58. char ch;
    59. while ((ch = getchar()) != '#') {
    60. if(ch=='<'||ch=='@'||ch=='\n')
    61. {
    62. if (ch == '<') {
    63. myStack.pop();
    64. }
    65. if (ch == '@') {
    66. myStack.setNull();
    67. }
    68. if (ch == '\n') {
    69. myStack.displayFromBottom();
    70. myStack.setNull();
    71. }
    72. }
    73. else {
    74. myStack.push(ch);
    75. }
    76. }
    77. myStack.displayFromBottom();
    78. return 0;
    79. }

  • 相关阅读:
    华为云云耀云服务器L实例评测|Huawei Cloud EulerOS 自动化环境部署
    概率论中的几个重要悖论问题
    代理模型学习记录
    9.14号作业
    java/Android:将字符串按数量分割
    深度思考计算机网络面经之三
    章节七:csv&excel
    1932. 合并多棵二叉搜索树 并查集+DFS
    如何写好项目管理应聘简历?
    11、Java 变量作用域、构造方法官方教程
  • 原文地址:https://blog.csdn.net/2301_79790771/article/details/136296985