BNU 25589 ls【字符的分离与匹配——有待完善Orz】

链接:




E. ls

1000ms
1000ms
65536KB
64-bit integer IO format:  %lld      Java class name:  Main
Font Size:   

You are implementing an operating system, and now need to write a program to list files in a directory: 'ls'. You want the user to be able to list only files that match a given pattern that can include wildcards (*), for example *.c. A wildcard matches zero or more characters of any kind.

Input

The first line contains a string P, containing 1-100 characters 'a'-'z', '*' and '.'. This is the pattern. The second line contains an integer N, 1 <= N <= 100, which is the number of files in the directory. Then follows N lines containing the names of the files in the directory. Each line is a string containing 1-100 characters 'a'-'z' and '.'.

Output

The output shall consist of the filenames that match the pattern, P, each on its own line, in the same order that they were given as input.

Sample Input

Sample Input 1
*.*
4
main.c
a.out
readme
yacc

Sample Input 2
*a*a*a
4
aaa
aaaaa
aaaaax
abababa

Sample Output

Sample Output 1
main.c
a.out

Sample Output 2
aaa
aaaaa
abababa



题意+思路:


字符的匹配,水过
题意:先给你一个字符中间包含若干个 '*'
           '*'代表在这些字符之间的 '*' 可以填充 0个或多个任意的字符
   然后给你一个数 N
 下面给你 N 组字符,如果能够像上面说的一样和第一个字符匹配则输出当前字符。 

思路:以 ‘*’ 分离模板字符并且记录分离出的每一个子串。
            如果下面的字符合法,那么必然包含了从模板中分离的每一个子串。
            一次按照顺序查找是否包含了模板的子串
            最后再判断首尾的情况。。。。。。
乱搞的!!!感觉我的代码只是判断字符合法的必要不充分条件,比赛时实在没办法了,交了下居然水过了。



总结:


对于 STL 的应用还是不熟悉,否则应该敲的更快的,要好好收集下相关资料了总结下才是。
然后对于分离字符好像也有个split 函数直接分离的,我居然不会用,太弱了。


code:

随便水过的,先贴个代码记录下,应该是数据弱了。。。
/*
字符的匹配,水过
题意:先给你一个字符中间包含若干个 '*'
      '*'代表在这些字符之间的 '*' 可以填充 0个或多个任意的字符
	  然后给你一个数 N
	  下面给你 N 组字符,如果能够像上面说的一样和第一个字符匹配则输出当前字符。 
**/
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn = 110;
char s[maxn]; //第一个模板字符 
string md[maxn]; //拆分第一个模板字符 '*' 
string str;
string s2;

int n;
int main()
{
	while(scanf("%s", &s) != EOF)
	{
		scanf("%d", &n);
		int len = strlen(s);
		char st = s[0];
		char en = s[len-1];
		
		for(int i = 0; i < maxn; i++) md[i] = "";
		int num = 0;
		for(int i = 0; i < len; i++)
		{
			if(s[i] == '*' || i == 0)
			{
				
				num++;
				//i++;
				while(s[i] == '*') i++; //排除多个 * 的情况 
				while(s[i] != '*' && i < len)
				{
					md[num]+=s[i];
					i++;
				}
				i--;
			}
		}
		//cout<<num<<endl;
		if(md[num] == "") num--;
		/*
		cout<<num<<endl;
		for(int i = 1; i <= num; i++)
		cout<<md[i]<<endl;
		*/
		while(n--)
		{
			int flag = 1;
			cin>>str; 
			int len1 = str.size();
			
			int a = 0;
			for(int i = 1; i <= num; i++)
			{
				string str1 = md[i];
				
				string str2 = str.substr(a, len1);
				if(str2.find(str1) == -1) 
				{
					flag = 0; break;
				}
				a += str1.size();
			}
			if(flag) //如果包含了模板中的所有的,再比较首尾状况 
			{
				if(st == '*' && en == '*') cout<<str<<endl;
				if(st == '*' && en != '*')
				{
					if(str[len1-1] == en) cout<<str<<endl;
				}
				if(st != '*' && en == '*')
				{
					if(str[0] == st) cout<<str<<endl;
				}
				
				if(st != '*' && en != '*')
				{
					if(str[0] == st && str[len1-1] == en) cout<<str<<endl;
				}
			} 
			 
		}
	}
	return 0;
}


资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外, v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值