标题
字符串查找
类别
字符串处理
时间限制
2S
内存限制
256Kb
问题描述
给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。
程序还需要支持大小写敏感选项:
当选项打开时,表示同一个字母的大写和小写看作不同的字符;
当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入说明
输入数据第一行包含一个字符串s,由大小写英文字母组成,长度不超过100。
第二行包含一个数字,表示大小写敏感选项。当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。每个字符串长度不超过100。
输出说明
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串s的行。
输入样例
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
输出样例
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
我的代码
#include<stdio.h>
#include<string.h>
int main(){
char a[101],b[101][101];
int i=0,j=0,k=0,x[101]={0};
int flag=0,m=0,n=0;
gets(a);
scanf("%d\n%d",&flag,&m);
for(i=0;i<m;i++)
scanf("%s",&b[i]);
n=strlen(a);
if(flag==1)
for(i=0;i<m;i++){
k=0;
for(j=0;b[i][j]!='\0';j++){
if(a[k]==b[i][j]){
k++;
}
else
k=0;
while(k==n-1&&x[i]==0){
puts(b[i]);
x[i]=1;
break;
}
}
}
else {
for(i=0;i<m;i++){
k=0;
for(j=0;b[i][j]!='\0';j++){
if(a[k]==b[i][j]||a[k]==b[i][j]+32||a[k]==b[i][j]-32){
k++;
}
else
k=0;
while(k==n-1&&x[i]==0){
puts(b[i]);
x[i]=1;
break;
}
}
}
}
return 0;
}
别的100分代码
#include<stdio.h>
#include<string.h>
char tran(char a){
if(a<='z'&&a>='a') return a-32;
else if(a<='Z'&&a>='A') return a+32;
}
int main(){
int sen,n,i,j,k,l;
char s[101],ch[1000][101];
scanf("%s%d%d",s,&sen,&n);
for(i=0;i<n;i++) scanf("%s",ch[i]);
if(sen==1){
for(j=0;j<n;j++){//二重循环,在每一行中搜索s
for(k=0;k<strlen(ch[j])-strlen(s)+1;k++){//防溢出
l=0;//初始化在这里进行!
if(ch[j][k]==s[0]){
for(;l<strlen(s);l++){
if(ch[j][k+l]!=s[l]) break;
}
}
if(l==strlen(s)){
printf("%s\n",ch[j]);
break;
}
}
}
}
else if(sen==0){
for(j=0;j<n;j++){
for(k=0;k<strlen(ch[j])-strlen(s)+1;k++){
l=0;
if(ch[j][k]==s[0]||tran(ch[j][k])==s[0]){
for(;l<strlen(s);l++){
if(ch[j][k+l]!=s[l]&&tran(ch[j][k+l])!=s[l]) break;
}
}
if(l==strlen(s)){
printf("%s\n",ch[j]);
break;
}
}
}
}
return 0;
}
输入样例
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
输出样例
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
Hello
0
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
HelloWorld
HiHiHelloHiHi
HELLO
HELLOisNOTHello
scanf("%s",&b[i]);读取字符串不用加&
hile (k == n - 1 && x[i] == 0)
这个 while应该改成if
应该是k == n
if (k == n && x[i] == 0)
你题目的解答代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char a[101], b[101][101];
int i = 0, j = 0, k = 0, x[101] = {0};
int flag = 0, m = 0, n = 0;
gets(a);
scanf("%d\n%d", &flag, &m);
for (i = 0; i < m; i++)
scanf("%s", b[i]);
n = strlen(a);
if (flag == 1)
{
for (i = 0; i < m; i++)
{
k = 0;
int t = 0;
for (j = 0; b[i][j] != '\0'; j++)
{
if (a[k] == b[i][j])
{
k++;
}
else
{
j = t;
t++;
k = 0;
}
if (k == n && x[i] == 0)// while应该改成if,应该是k == n
{
puts(b[i]);
x[i] = 1;
break;
}
}
}
}
else
{
for (i = 0; i < m; i++)
{
k = 0;
int t = 0;
for (j = 0; b[i][j] != '\0'; j++)
{
if (a[k] == b[i][j] || a[k] == b[i][j] + 32 || a[k] == b[i][j] - 32)
{
k++;
}
else
{
j = t;
t++;
k = 0;
}
if (k == n && x[i] == 0)// while应该改成if,应该是k == n
{
puts(b[i]);
x[i] = 1;
break;
}
}
}
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!