【问题描述】

l 定义和声明一个线性表ADT

l 基于顺序表或者链表实现线性表ADT(具体采用顺序表或者哪种链表可自行选择)

l 输入一行字符,存入线性表中,要求编写测试程序,能统计出其中英文字母、数字、其他字符的个数,并输出删除所有数字后得到的新的字符串。

【输入形式】

从标准输入读入数据     第一行输入一行字符

【输出形式】

输出到标准输出  包含两行:

第一行:统计值,包括英文字母、数字、其他字符的个数,依次输出,数据和数据之间使用空格隔开

第二行:输出删除数字后的新字符串

【样例输入】

 aklsjflj123sadf918u324asdf91u32oasdf/.;123

【样例输出】

 23 16 3aklsjfljsadfuasdf1uoasdf/.;

【样例说明】

         英文字母、数字、其他字符的个数,依次为23,16和3第二行是删除数字后的字符串

【测试样例的规模】

        输入的字符串的长度小于等于XXX

【代码提交及评分要求】

   源代码请提交工程压缩包,压缩包内至少包含以下三个文件:

1)XXX.h:线性表ADT的定义和声明

2)XXX.h:线性表ADT的实现

3)XXXXX.cpp:主程序

(要求基于ADT实现,否则计0分。)

list.h

#ifndef LIST
#define LIST
template <typename T>
class List
{private:int max_size;int list_size;int curr; //当前元素的位置T *list_array;public:// 构造函数List() {}// 析构函数virtual ~List() {}// 清空Listvirtual void clear() = 0;// 在index位置插入元素valvirtual void insert(int index, T &val) = 0;// 在结尾处valvirtual void append(T &val) = 0;// 删除索引index处的元素virtual void remove(int index) = 0;// 删除结尾元素并返回值virtual T pop() = 0;// 返回索引index处的元素virtual T get_value(int index) = 0;// 输出数组virtual void print_list() = 0;// 获取长度virtual int length() = 0;
};
#endif

AList.h

#include "list.h"
#include <assert.h>
#include <iostream>
using namespace std;template <typename T>
class AList : public List<T>
{private:int max_size;int list_size;T *list_array;public:// 构造函数AList(int size = 100){max_size = size;list_size = 0;list_array = new T[max_size];}~AList(){delete[] list_array;}void clear(){delete[] list_array;list_size = 0;list_array = new T[max_size]; //新建空数组}void insert(int index, T &val){assert(list_size < max_size);for (int i = list_size; i >= 0; i--){if (i == index){list_size++;list_array[i] = val;return;}list_array[i] = list_array[i - 1];}}void append(T &val){assert(list_size < max_size);list_array[list_size++] = val;}void remove(int index){for (int i = index; i < list_size - 1; i++){list_array[i] = list_array[i + 1];}--list_size;}T pop(){return list_array[--list_size];}T get_value(int index){return list_array[index];}void print_list(){for (int i = 0; i < list_size; i++){cout << list_array[i];}}int length(){return list_size;}
};

AListTest.cpp

// #include <bits/stdc++.h>
#include "list.h"
#include "AList.h"
#include <iostream>
using namespace std;int main()
{AList<char> l(1000);char s;s = cin.get();while (s != '\n'){l.append(s);s = cin.get();}int len = l.length();if (len == 0)return 0;int dig_num = 0, letter_num = 0, other_num = 0;for (int i = 0; i < len;){if ((l.get_value(i) >= 'a' && l.get_value(i) <= 'z') || (l.get_value(i) >= 'A' && l.get_value(i) <= 'Z')){letter_num++;i++;}else if (l.get_value(i) >= '0' && l.get_value(i) <= '9'){dig_num++;l.remove(i);len--;}else{other_num++;i++;}}cout << letter_num << ' ' << dig_num << ' ' << other_num << endl;l.print_list();return 0;
}

数据结构与算法:实验一线性表(字符串分类统计)相关推荐

  1. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  2. 【数据结构与算法】之线性表的应用和操作

    数据结构概念 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构.树形结构.图形结构以及集合结构. 数据结构的物理结构:数 ...

  3. 【数据结构与算法基础】线性表

    写在前面 挺早之前看的数据结构和算法了,但是最近刷LeetCode上题目的时候发现还不是很熟练(都忘光了....),于是狠心再来一遍.边整理边刷题,用的教材是北大裘宗燕的<数据结构与算法pyth ...

  4. 21级数据结构与算法实验1——顺序表

    7-1 顺序表的建立及遍历 分数 30 作者 陈晓梅 单位 广东外语外贸大学 读入n值及n个整数,建立顺序表并遍历输出. 输入格式: 读入n及n个整数 输出格式: 输出n个整数,以空格分隔(最后一个数 ...

  5. 数据结构与算法笔记(二) 线性表(数组描述)

    c++常用的数据描述方法是数组描述和链式描述,线性表可以用来说明这两方法,先介绍数组描述的线性表.后面再介绍链式描述的线性表. C++ STL容器vector和list相当于线性表的数组描述和链式描述 ...

  6. 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)

    查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...

  7. 头歌实践教学平台数据结构与算法:02线性表

    针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中 ...

  8. 头歌实践教学平台数据结构与算法:02线性表——反转链表(拓展)

    针对数据结构02线性表--反转链表(拓展)在头歌平台练习过程中的完成代码,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 已知一个带头结点的单链表L,将L反转并返回反转后的单链表.要求将L的 ...

  9. 数据结构与算法:06 线性表

    06 线性表 知识结构: 1. 线性表的定义与操作 1.1 线性表的定义 线性表(Linear List)是由n(n≥0)n (n≥0)n(n≥0)个相同类型的数据元素a0,a1,⋯,an−1a_0, ...

  10. 【数据结构与算法】删除线性表中的零元素

    题目 删除顺序结构线性表中的零元素,不改变原表的顺序. input: 10,2,0,0,5,7,0,4,0,0 output: 10,2,5,7,4 解决 解法一 发现一个零元素,就删除一个.将后面的 ...

最新文章

  1. Bossy智能便贴:让工作更有效率
  2. Netty防止内存泄漏措施
  3. LeetCode 142环形链表||-中等
  4. android 画圆教程,android shap画圆(空心圆、实心圆)
  5. unzip 报错error [clas.zip]:  missing 1844 bytes in zipfile
  6. Makefile、多Makefile编译静态库、动态库、SRC实例总结
  7. 包含头文件的问题之1.7编程基础之字符串 24:单词的长度
  8. mysql 的isnull
  9. 沃尔玛实验室 —— 为什么我们要启动开源计划
  10. 触控事件MotionEvent
  11. 面向对象的关键技术(多态、接口、抽象)
  12. linux桌面lxde 安装_如何在Arch Linux上安装LXDE桌面
  13. UE4导入外部插件方法
  14. python打印古诗_python教程:利用python基础知识取出对应诗句
  15. 2021--ICPC网络预选第一场--A Busiest Computing Nodes
  16. python 爬虫(项目实操)
  17. 树的数据结构代码_如何以无代码方式学习树数据结构
  18. 微信小程序如何添加业务域名
  19. 如何使用SSM框架开发一套WEB薪资管理系统
  20. LeetCode股票问题总结java

热门文章

  1. 常用的Ant风格书写
  2. nova创建instance流程
  3. 3.3 修改“时间”维度
  4. Http Module 介绍
  5. class DELPHICLASS TObject
  6. po3580SuperMemo(splay)
  7. ANDROID开发java.lang.NoClassDefFoundError: com.baidu.location.LocationClient的解决办法
  8. 跟我学spring3 电子书下载(完)
  9. 建立高可用性的数据库群集
  10. ASP Session的功能的缺陷以及解决方案