我记得在刚入队的时候我就是,遇到字符串的题就头疼。今天的这道题改了一个小时,脑阔疼。
Notebook
1.s.find(要寻找的字符串) 找到返回首字母所在位置,找不到返回-1
2.s.length()/s.size() 我们可以简单地知道(string类型)的s的长度
Description
给定 n 个字符串,求有多少字符串是其他字符串的前缀。
Input
第一行为一个整数n(1 <= n <= 1000),之后n行,每行一个字符串,字符串只由26个小写字母组成,最大长度为100。
Output
一个整数,有多少字符串是其他字符串的前缀。
Sample Input
5
abcde
ab
bcde
b
cde
Sample Output
2
Source
Unknown
Soultion
平心而论,真的挺水的- -不过有几个地方会卡住:
1.在输入n之后需要getchar()读取回车,否则第一个输入的字符串就是这个回车- -
2.记得判断当前字符串是否已经成为前缀
3.乖乖遍历
4.
AC代码
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string s[1001];
bool a[1001]={0};//判断是否已经成为前缀
int n,sum=0;
scanf("%d",&n);
getchar();//!!!
for(int i=1;i<=n;++i)
{
getline(cin,s[i]);
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(!a[i]&&i!=j&&s[i].length()<=s[j].length())
{
if(s[j].find(s[i])==0)
{
++sum;
a[i]=1;
//printf("%d %d\n",i,j);
//cout<<s[i]<<" "<<s[j]<<"\n";
}
}
}
}
printf("%d\n",sum);
return 0;
}