NOIP1998 分割单词
输入一个长度不超过80个字符的字符串(称为源串),该字符串由小写英文字母、空格组成,并以'.'结束。
单词是由连续字母组成,两个单词直接至少有一个空格。
本程序的功能为:首先找出字符串中所有单词并保留一个空格作为单词分割,存入数组ch中。
然后用键盘输入一个待查找的单词,以字符‘$’结束。采用顺序查找的方法再ch中进行查找,
若找到,则输出该单词在ch中出现的序号(若有多个位置出现该单词,则只输出第一个序号位置)。若不存在,则输出'NOT FOUND'。
01 #include<iostream>
02 #include<cstdio>
03 using namespace std;
04 char a[85],b[85],ch[85];
05 int i,j,k,n,m;
06 int main()
07 {
08 n=0;
09 do
10 {
11 --1-- ;a[n]=getchar();
12 }while(a[n]!='.');
13 k=0;
14 for(i=1;i<=n++i)
15 if(a[i]>='a'&&a[i]<='z')
16 {
17 k++;
18 --2--;
19 }else if(k!=0)
20 if(ch[k]!=' ')
21 {
22 k++;ch[k]=' ';
23 }
24 m=0; --3--;
25 do
26 {
27 m++;b[m]=getchar();
28 }while(--4--);
29 i=1;j=1;k=1;b[m]=' ';
30 while(i<=n&&j<=m)
31 {
32 if(--5--)
33 {
34 i++;j++;
35 }
36 else
37 {
38 while(ch[i]!=' ') i=i+1;
39 i=i+1;j=1;k++;
40 }
41 }
42 if(--6--)
43 {
44 printf("%d",k);
45 }
46 else printf("NOT FOUND");
47 return 0;
48 }
#include<iostream>
#include<cstdio>
using namespace std;
// a源串 b待查找的串
char a[85],b[85],ch[85];
int i,j,k,n,m;
int main()
{
n=0;
do
{
n=n+1;a[n]=getchar();
}while(a[n]!='.');//读入源串字符 到a数组 以.结尾
k=0;
for(i=1;i<=n;++i)//遍历读入的字符 n为读入字符串长度
if(a[i]>='a'&&a[i]<='z')//小写字母存入ch数组
{
k++;
ch[k]=a[i];
}else if(k!=0)//如果k不为0 说明ch里面已经有字符
if(ch[k]!=' ')//空格存入ch中 每个单词后的空格放入ch中
{
k++;ch[k]=' ';
}
m=0; n=k;
do
{
m++;b[m]=getchar();
}while(b[m]!=char(36));//读入待查找的字符串以$结尾 $的ASCII码为36
i=1;j=1;k=1;b[m]=' ';
while(i<=n&&j<=m)//n为处理后源串的长度 m为待查找的字符串长度
{
if(ch[i]==b[j])//如果相等匹配各自下一个字符
{
i++;j++;
}
else
{
while(ch[i]!=' ') i=i+1;//如果不匹配 则跳过源串此单词的后续字符
i=i+1;j=1;k++;//跳过空格从下一个单词开始 待匹配从头开始 位置k+1
}
}
if(j>m-1)// m包括$长度 待匹配字符串长度为m-1 只要j>m-1说明待查找字符已经都找到了
{
printf("%d",k);
}//否则未找到
else printf("NOT FOUND");
return 0;
}
/*
1
abc.abc$//1
2
bc abc.abc$//2
3
bc a ab abc.abc$//4
abcd.abc$ // NOT FOUND 必须全匹配
abcd.bcd$// NOT FOUND 必须全匹配
*/
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号