1 题目描述
蛮力字符串查找
成绩 | 10 | 开启时间 | 2021年09月30日 星期四 18:00 |
折扣 | 0.8 | 折扣时间 | 2021年10月18日 星期一 00:00 |
允许迟交 | 否 | 关闭时间 | 2021年12月1日 星期三 00:00 |
小林和小红在做一个匹配单词的小游戏,小林给出N个单词和一个字符串T,小红需要在给出的单词里面找出所有以T为前缀的单词,并按字典序进行排序。
输入格式
输入第一行为正整数 N (1 ≤ N ≤ 1000)
接下来 N 行,每行一个单词,长度不超过 100;
最后一行包含字符串 T。
均为小写字母输出格式
按字典序升序输出答案。如果不存在符合条件的单词,则输出 "No Result! "(不包括引号)
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 19 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 20 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
2 代码
// C语言可以利用strstr()函数
/* 函数用法例子在下面
#include <stdio.h>
#include <string.h>
int main()
{
// 这个返回的是第一次出现的地址,所以对于注释的声明来说子串是NOOBF
// const char haystack[20] = "RUNOOBF";
const char haystack[20] = "RUNOOB";
const char needle[10] = "NOOB";
char *ret;
ret = strstr(haystack, needle);
printf("子字符串是: %s\n", ret);
return(0);
}
*/
/*c++*/
/*c++字符串的find函数 s.find(t),在s中查找t,返回值为int,是t在s中第一次出现的下标,
针对这道题,如果返回值不是0,就不是前缀,就不是要查找的字符串,之后对符合条件的字符串排序即可*/
#include<bits/stdc++.h>
using namespace std;
#define N 1000
int main(int argc, char *argv[]){
int n;
string str[N],needle,ans[N];
int i,j;
int length;//保存needle的长度
int p=0;//用来遍历ans
freopen("file in.txt","r",stdin);
cin>>n;
for(i=0;i<n;i++){
cin>>str[i];
}
cin>>needle;
length = needle.size();
for(i=0;i<n;i++){
// 对str里面n个字符串进行遍历
for(j=0;j<length;j++){
// 对每一个字符的前length位进行遍历
if(str[i][j] != needle[j]){
// 有不同,跳出循环,对比下一个字符串
break;
}
}
// 对比完了之后
if(j==length){
// 如果上面的循环走完了,没有跳出来说明是有含在里面的
ans[p++] = str[i];
}
}
if(p==0){
// 如果ans里面一个都没有保存的话说明没有
cout<<"No Result!"<<endl;
}
else{
// ans里面并不空,对其进行排序
/*sort(begin,end,greater<data-type>())是升序;
sort(begin,end,less<data-type>())是降序;
缺少参数时默认是非降序
里面的data-type还不太懂,不填也可以好像,没有报错
对于向量
sort(v.begin(),v.end())即可。
*/
sort(ans,ans+p);
for(i=0;i<p;i++){
cout<<ans[i]<<endl;
}
}
return 0;
}
/*
还可以利用substr()来做
if(s[i].substr(0, length) == t)//substr提取子串
ans[p++] = s[i];
*/