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  必须全匹配
*/
posted @ 2022-08-12 17:26  new-code  阅读(44)  评论(0)    收藏  举报