一、什么是前后缀

 字符串的前缀:符号串左部的任意子串(或者说是字符串的任意首部)

  字符串的后缀:符号串右部的任意子串(或者说是字符串的任意尾部)

  举例:比如 101110 它的前缀就是空串、1、10、101、1011、10111、101110 ;后缀就是空串、0、01、011、0111、01110、011101

二、设计窗口界面

  进入vs,选择C#窗口应用,创建一个新的项目,然后就是设计一个窗口界面

  1、字符串输入

    想要获取输入的字符串,这里选择TextBox这个控件,直接在工具箱中选择这个控件,拖入到窗口中,然后放到你想要放的位置

  2、执行按钮

    执行按钮就是运行函数的按钮,通过这些函数来获取通过TextBox输入的字符串的前后缀以及子串,这里的控件就选择Button

  3、结果输出

    输出窗口就是输出经过运行函数后得到的结果,这里控件选用ListBox

  4、退出窗口

    退出按钮就是直接结束整个文件的运行,同样选用Button

这是最终设计结果的样图(可以按照自己的喜好来进行排版)

三、函数实现

  在这里我们从难到易开始讲解,先是退出按钮的定义,然后是执行按钮的定义。

  1、退出

    在退出按钮上双击,进行这个按钮的定义,在这个按钮的函数中输入以下内容,就达到了我们的目的了

     1 this.Close();

  2、执行

    在执行按钮中包含了许多的函数,用来对字符串进行前缀、后缀、子串的筛选,在这个版块中,首先讲解一下,我们自己定义的前后缀函数的含义

       //前缀函数
private string[] prefix(string str)
{
int len = str.Length; //获取字符串的长度
string s = ""; //用于存放每一个元素
string[] result = new string[len]; //定义新的数组
for(int i=0;i<len;i++)
{
s = s + str[i]; //每次往后加一个字符
result[i] = s; //把结果存放到新的数组中
}
return result;
}
       //后缀函数
private string[] suffix(string str)
{
int len = str.Length; //获取字符串长度
string s = ""; //用于存放每一个元素
string[] result = new string[len];//定义新的数组
for (int i = len - 1; i >= 0; i--)
{
s = str[i] + s; //每次从后往前加一个字符
result[len - 1 - i] = s; //把结果存放到新的数组
}
return result;
}

因为我已经在代码注释中详细解释了每一行的含义,这里就不再进行过多的赘述,所以接下来我们就直接讲述,对这两个函数的调用,以及输出结果

接下来所有的代码都是定义在执行按钮里的,也就是你要双击执行按钮,进入代码界面,找到执行的函数,然后在里面输入以下的代码

首先,是对于输入空字符串的警告(也就是你啥也没输入,就点击了执行,总要提醒让你输入)

if (text_input.Text == "")
{
MessageBox.Show("尚未输入字符!请重新输入。"); //显示警告提示窗
}

上面出现了if,那下面就少不了else,但是这个else里的内容比较多;

首先出现在else里的是对TextBox中内容的获取,在C++中就相当于cin

string str = text_input.Text;//获取用户输入的串
int len = text_input.Text.Length; //获取这串字符串的长度
string output_str = "串X = " + str;
result.Items.Add(output_str);//把文本值附加到listbox中

既然我们已经获取到了想要处理的字符串,那接下来就是把这串字符串送到我们之前定义的前后缀函数中进行处理,也就是输出,我们想要的前后缀字符串

//输出前缀及个数
string[] result_pre = prefix(str); //定义新的数组,存放前缀函数处理的内容
string output_pre = "X的前缀 = { "; //定义输出的格式
for(int i=0;i<len;i++) //循环输出上述新数组中的内容
{
output_pre = output_pre + result_pre[i] + ", ";
}
output_pre = output_pre + "空串 } 个数 = " + (len + 1); //这里对len加1 是因为还有一个空串
result.Items.Add(output_pre); //把结果添加到ListBox中,显示出来
//输出后缀及个数
string[] result_suf = suffix(str); //定义新的数组,存放前缀函数处理的内容
string output_suf = "X的后缀 = { "; //定义输出的格式
for (int i = 0; i < len; i++) //循环输出上述新数组中的内容
{
output_suf = output_suf + result_suf[i] + ", ";
}
output_suf = output_suf + "空串 } 个数 = " + (len + 1); //这里对len加1 是因为还有一个空串
result.Items.Add(output_suf); //把结果添加到ListBox中,显示出来

在上述输出前后缀代码中,对每一行代码都进行了详细的注释,这里也就不再进行过多的赘述,自行参悟

在输出了前缀、后缀之后,我们就需要输出最后的内容——子串

//输出子串及其个数
int max_res_index = ((1 + len) * len) / 2; //计算得出字串的最长长度
string[] result_son = new string[max_res_index]; //定义一个新的数组,长度为计算的长度
int res_index = 0;
for (int i = 0; i < len; i++)
{
string[] temp = prefix(str); //去掉一个字符之后的串的前缀
for (int j = 0; j < len - i; j++)
{
result_son[res_index] = temp[j];
res_index++;
}
str = str.Remove(0, 1);//删除开头的字符
}

经过上面的运算后,会发现会出现重复的子串,这里就要进行去重处理

//去重
for (int i = 0; i < max_res_index; i++)
{
for (int j = i + 1; j < max_res_index; j++)
{
if (result_son[i] == result_son[j])
{
for (int k = j + 1; k < max_res_index; k++)
{
result_son[k - 1] = result_son[k];
}
max_res_index--;
j--;
}
}
}

在完成所有的操作后,就要把得到的子串通过ListBox输出

string output_son = "X除前后缀之外的子串 = { ";
for (int i = 0; i < max_res_index - 1; i++)
{
output_son = output_son + result_son[i] + ", ";
}
output_son = output_son + result_son[max_res_index - 1] + " 空串 } 个数 = " + (max_res_index+1);
result.Items.Add(output_son);

因为和上面的代码类似,这里也就不解释了

到这里我们的执行按钮的所有代码就结束了这么多的内容都是在else里的,千万不要搞错了

以上所有内容就是本次实验的所有内容了。

最后给出我们做出来的最终结果

图片我也不知道怎么回事,全是椭圆形,就凑活着看吧!!!

C# 输出一个字符串的前缀、后缀和它的子串(信息内容安全 实验一)的更多相关文章

  1. poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)

    题目链接:https://vjudge.net/problem/POJ-1056 题意:给定一个字符串集,判断是否存在一个字符串是另一个字符串的前缀. 思路:和hdoj1671一样,有两种情况: 当前 ...

  2. python-又来练习题--输出一个字符串中最长的子字符串及其长度

    一.有个字符串 str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111' 包含特殊字符.数字和字母,输 ...

  3. java中输出一个字符串里面的空格,字母还有数字的数目举例说明

    9.6 About string,"I am a teacher",这个字符串中有多少个字,且分别把每个字打印出来. /*本题的思路就是,当我有一个字符串,我需要一个一个字符的处理 ...

  4. Python习题-输出一个字符串中最长的子字符串及其长度

    描述:有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符.数字和字母,输出最长的子字符串和他的长度#例如上面的字符串包含数字字母的字符串是svda123,长度 ...

  5. Python3基础 for循环 遍历并输出一个字符串的列表

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  6. yes - 不断输出一个字符串,直到杀死其为止

    SYNOPSIS(总览) yes [OPTION]... [STRING]... DESCRIPTION(描述) 不断输出包括所有指定STRING(s)的一行,或者是`y'. --help 显示帮助并 ...

  7. StrStr,判断一个字符串是不是另一个字符串的字串,并返回子串的位置

    public int strStr(String haystack, String needle) { if(haystack == null || needle == null) { return ...

  8. python输入一个字符串,输出翻转后的字符串(翻转字符串)

    题目:输出一个字符串,输出翻转后的字符串.例如:输入字符串a123,输出321a. 方法一:使用列表的reverse方法 string=input('请输入一个字符串:') lst=list(stri ...

  9. AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)

    如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...

随机推荐

  1. sass文件编译(.scss->.css),使用ruby环境,在windows10,koala工具,Error: Invalid GBK character "\xE5"

    1 注意事项: 问题描述: 请确保 Encoding.default_external = Encoding.find('utf-8') 是uft-8 编码! sass文件编译时候使用ruby环境,在 ...

  2. Dart SDK All In One

    Dart SDK All In One Dart SDK archive https://dart.dev/tools/sdk/archive https://dart.dev/get-dart Th ...

  3. Angular 8.x in Action

    Angular 8.x in Action web fullstack / fullstack web Angular 8 https://angular.io/ Angular 2, Angular ...

  4. 专利 & 发明专利 & 专利查询

    专利 & 发明专利 & 专利查询 PDF 文档中表格解析的方法.系统.存储介质及电子设备 中国专利公布公告 http://epub.sipo.gov.cn/index.action 中 ...

  5. Captain technology INC:全球新能源汽车格局突变

    美国能源信息署EIA的统计数据显示,2020年上半年全美含纯电动和插电混动在内的新能源乘用车总销量仅为11.1万辆,同比缩水25%.虽然特斯拉在第三季度靠着13.93万辆的销量迎来了环比387%.同比 ...

  6. yaml配置和ini配置的数据源配置和数据获取

    1.前言 关于yaml和ini的相关理论暂不做记录,不影响代码编写,百度即可. 2.关于配置文件的选择 yaml 和 ini 都使用过, 但是yaml更符合人类使用,已要弃用ini,后期各项目均采用y ...

  7. np.mean(img, axis=(0, 1))

    np.mean(img, axis=(0, 1))   img 是shape为(H,W,3)的图片 np.mean(img, axis=(0, 1)) 是求出各个通道的平均值,shape是 (3, ) ...

  8. SCSS引入通用SCSS

    新建通用common.scss .empty { margin-top: 100rpx; text-align: center; .empty-img { width: 220rpx; height: ...

  9. 微信小程序:删除时提示是否删除

    代码如下: wx.showModal({ title: '提示', content: '确定要删除吗?', success: function (sm) { if (sm.confirm) { // ...

  10. vue关于导航守卫的几种应用场景

    beforeEach 该钩子函数主要用来做权限的管理认证 router.beforeEach((to, from, next) => { if (to.matched.some(record = ...