uestc oj 1035 论文搜索

#include 
#include 
#include 
#include 
using namespace std;
void consume(char ch)
{
	while (getchar() != ch);
}
char key[32], title[128];
int main()
{	int T, N;
	scanf("%d", &T);
	while (T--)
	{	scanf("%d", &N);
		consume('\n');
		int res = 0;
		gets(key);
 for (int i = 0; i < N; i++)
		{	gets(title);
			bool useful = false;
			char *token = strtok(title, "  ");
			while (token != NULL)
			{
				if (strcmp(token, key) == 0)
				{
					useful = true;
					break;
				}
				token = strtok(NULL, " ");
			}
			if (useful) res++;
		} 
      if (res == 0)	printf("Do not find\n\n");
      else		printf("%d\n\n", res);
    }
    return 0;
}	
 				    
论文的标题的字符串是由空格隔开,可拆成一个一个的单词,然后和查询的字符串比较即可。
将标题字符串拆分可以用普通处理字符串的方式实现——麻烦
应掌握更简便的方法:使用各种字符串处理函数:(#include ) 
C语言:strtok
C++:istringstream 

除此之外,还有如:strcspn ,strstr ,strlen ,strncat,strncmp ,strncpy ,strpbrk 等


char *strtok(char *s, char *delim);
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’\0′)来替换,直到找遍整个字符串。
说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。strtok在s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。
返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。 


#include
#include
int T,n,ans;
char key[21],title[102];

int main()
{
   //freopen("1.txt","r",stdin);
   scanf("%d",&T);
   while(T--)
   {
      scanf("%d",&n);
      getchar();
      gets(key);
      ans = 0;
      while(n--)
      {
          bool flag = false;
          gets(title);
          char *tok = strtok(title," ");
          while(tok !=NULL)
          {
              if(strcmp(key,tok)==0)
              {
                  flag = true;
                  break;
              }
              tok = strtok(NULL," ");
          }
          if(flag) ans++;
      }
      if(ans == 0) printf("Do not find\n\n");
      else printf("%d\n\n",ans);
   }
   return 0;
}

下面写几个示例介绍C语言中strtok的用法

/* strtok example */
#include 
#include 

int main ()
{
  char s[100];
  printf("请输入一行字符串:");
  gets(s);
  printf("下面显示的将是通过空格和分号和惊叹号分割产生的字符串\n");
  char *pch = strtok(s," ;!");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ;!");
  }
  return 0;
}

关于字符串的处理如果用指针而不是用编译器提供的系统函数将会是比较复杂的一件事情

下面尝试着实现一下

表示写了一个多小时失败了,还是指针学的不好


你可能感兴趣的:(数据结构--字符串)