统计单词数(水题)

一.目的

感觉挺有意思,要考虑的东西很多。比如,怎么得出第一个相同单词的下标,并将它保存起来。怎么只比较以空格隔开的单词,还有防止越界等。

二.题目大意

http://codevs.cn/problem/1131/

三.大体思路

因为要比较单词是否相同, 就在一个while()内以空格为界线,去逐个判断各个字母是否相同,用一个数组将每一个相同单词首字母的下标记录下来(这里应该可以优化,不用开辟空间,我下去再想想)。

四.代码

/*统计单词个数 */
# include <stdio.h>
# include <string.h>

int sum =0;
int a[1000003];


int main(void)
{
  char str1[12];
  char str2[1000005];
  gets(str1);
  gets(str2);
  int t =0;
  int len1 = strlen(str1);
  int len2 = strlen(str2);
  for(int i = 0; i<len2; i++)
  {
    int c = 0;
    int num =0;
    while(str2[i] != ' ')//单词比较的地方,遇到空格直接跳出
    {
       if((str1[c] == str2[i])  || (str1[c]+32 == str2[i]) || (str1[c] == str2[i]+32))
       {
         num+=1;
       } 
       i+=1;

       if(i>=len2)//防止i>=len2时while没有结束
        break;
       c+=1;
       if(c > len1)//防止一个单词是 toasdfsf 的情况
       { 
         num =0;
       } 
    }
    if(num == len1)//通过个数来比较
    { 
         sum+=1;
         a[t] = i-c;//i-c刚好为单词首元素的下标
         ++t;
    }


  }
  a[t] = '\0';
   if(sum!=0)
  printf("%d %d\n",sum, a[0]);
   else
  printf("-1\n");


  return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值