P1308

news/2024/10/18 2:35:26/
  • 这个代码的关键思路是,在字符串的最后面加上一个空格,使所有的单词都满足后面有一个空格的性质,通过后面的空格来定位一个单词的结束。
#include <stdio.h>
#include <string.h>
int main() {char a[11], b[1000001];gets(a);gets(b);strcat(a," ");strcat(b," ");//在ab后各加一个" ",减小配对的难度int i, s, n=0, l, j, ss=0, k, rec;for (i = 0; a[i] != '\0'; i++) {if (a[i] >= 'a')a[i] -= 'a' - 'A';}for (i = 0; b[i] != '\0'; i++) {if (b[i] >= 'a')b[i] -= 'a' - 'A';} //统一ab的大小写//for (i = 0; b[i] != '\0'; i++){if (b[i] == ' ')//每找到一个空格,视为一个单词,一上来就在最后一个单词后面加上了空格,使得所有单词都符合这个规律,将低了难度。{s=1;//假设能够找到//s是状态变量for (j = n,k = 0; j <= i, a[k] != '\0'; j++, k++){if(b[j] == a[k]){s*=1;//用s来记录各个位能否对应,如果结果是1就正确,一位不对s就变成0}else{s*=0;}}if (s == 1){ss++; //如果每次都对就增加符合的次数}if (ss == 1 && s==1){rec = n; //记录第一次符合的位数}n=i;//n是位置变量,用来记录单词首。n++;}}if (ss == 0) {ss = -1;printf("%d", ss);} else if (ss >= 1) {printf("%d %d", ss, rec);}return 0;
}
  • 这个代码最简洁,原作者“码力”十足呀,真是大佬。思路也是最简单的,就是找出来能和目标字符串匹配的串,然后用 if 语句判断这个串是否满足条件。
//
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
string sent,word;
int lens,lenw,t,pos;
int main()
{//这里为什么用这种输入方式呢?getline(cin,word);getline(cin,sent);   //字符串含有空格输入,不可以用cin,否则to me只能读到tolenw=word.size();lens=sent.size();for(int i=0;i<lenw;i++)word[i]=toupper(word[i]);  //转成大写for(int i=0;i<lens;i++)sent[i]=toupper(sent[i]);t=0;for(int i=0;i<=lens-lenw;i++){int j;for(j=0;j<lenw;++j){if(sent[j+i]!=word[j]) break;if(i>0&&sent[i-1]!=' ') break;    //不是单词开头就结束}if(j==lenw&&(sent[j+i]==' '||j+i==lens)) //单词长度匹配,后面是空格或者句末{t++;if(t==1) pos=i;}}if(t==0)cout<<-1;else cout<<t<<" "<<pos;return 0;
}
  • 这个代码用了stl里的string类里的find函数,值得学习。
//我的代码比较结构化,容易理解
//在此也建议大家多用用string类,c++有关于string的特大好处,c和pascal都没有哦
//
//定义头文件
#include <iostream>
#include <string>
//命名空间
using namespace std;
int main(){//定义两个字符串string a;string b;//用string库,调用getline, 直接读入一整行getline(cin,a);getline(cin,b);//转换大小写,可以都转换为大写,或者小写for (int i=0;i<a.length();++i){a[i]=tolower(a[i]);}for (int i=0;i<b.length();++i){b[i]=tolower(b[i]);}//因为连起来的不算,所以要在前后加几个空格,一定要是同样多的,同量减同量,等于同量a=' '+a+' ';b=' '+b+' ';//先看看会不会找不到,用a.find()和string::nposif (b.find(a)==string::npos){cout<<-1<<endl;}//如果找得到else {int alpha=b.find(a);int beta=b.find(a),s=0;//计数器初始化为0while (beta!=string::npos){++s;//计数器beta=b.find(a,beta+1);}cout<<s<<" "<<alpha<<endl;//输出第一个和总共有几个}//函数返回值为0,结束整个程序return 0;
}

总之,这个题就是,一定要先把两个字符串里的大小写字母给统一起来。


http://www.ppmy.cn/news/150162.html

相关文章

208 - Junit

Junit 单元测试 1、引入 【1】软件测试的目的 软件测试的目的是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 【2】测试分类 &#xff08;1&#xff09;黑盒测试 软件的黑盒测试意味着测试要在软件的接口处进行。…

公司百兆局域网千兆升级方案之硬件设备升级(一)

百兆局域网千兆升级方案 随着主机的升级公司已有90%以上的主机带有千兆网卡,以及网络的应用增多,对交换机之间、以及交换机到服务器之间带宽的要求越来越高,原有带宽已经成为制约网络传输的瓶颈。将主干网络提升至千兆以太网,是目前公司网络改造实现速度提升的总要保证。 分…

window用户程序数据文件夹AppData

window用户程序数据文件夹AppData 在 Windows 操作系统中&#xff0c;C 盘的用户的 AppData 文件夹包含了当前用户与计算机上的许多应用程序相关的数据。具体来说&#xff0c;AppData 文件夹包含三个子文件夹&#xff0c;分别为&#xff1a; Local(本地)&#xff1a;这个文件夹…

spoj1812

此题困扰了我一天。。。今天才得以解决啊。。问了两位大神才得解。 一直没搞懂为什么要对长度进行统计然后就是dag有序了 首先sam就是一个dag的图&#xff0c;为什么是dag呢&#xff0c;由于自动机从根出来的每一路径都是一条子串&#xff0c;那么必定无环&#xff0c;则一定…

22.1.18

一.AcWing算法学习 1.区间和并 ①pair<int,int>的排序优先排序左边&#xff0c;再排序右边&#xff1b; ②for(auto a:b)中b为一个容器&#xff0c;效果是利用a遍历并获得b容器中的每一个值&#xff0c;但是a无法影响到b容器中的元素。 for(auto &a:b)中加了引用…

CH1801

括号画家 Candela是一名漫画家&#xff0c;她有一个奇特的爱好&#xff0c;就是在纸上画括号。这一天&#xff0c;刚刚起床的Candela画了一排括号序列&#xff0c;其中包含小括号()、中括号[]和大括号{}&#xff0c;总长度为N。这排随意绘制的括号序列显得杂乱无章&#xff0c;…

T1008

分支结构&#xff08;switch语句 &#xff09;&#xff1a;四兄弟 要求&#xff1a; 1.输入运算法对a&#xff0c;b进行运算 方案 1.对于Q1: 为了避免过多的if else语句造成的代码冗余 使用switch语句 switch语句算法模版&#xff1a; 用处&#xff1a;充当算法的分支结…

SP800_186_OverView

文章目录 2. Overview of Elliptic Curves2.1 Non-binary Curves2.1.1 Curves in Short-Weierstrass Form2.1.2 Montgomery Curves2.1.3 Twisted Edwards Curves 2.2 Binary Curves2.2.1. Curves in Short-Weierstrass Form 3. Recommended Curves for U.S. Federal Government…