字符数统计
include
include
using namespace std;
int main()
{
char s[10];
gets(s);
int n=strlen(s);
int ans=0;
for(int i=0;i<n;i++)
{
if(s[i]>='A'&&s[i]<='Z')
ans++;
if(s[i]>='a'&&s[i]<='z')
ans++;
if(s[i]>='0'&&s[i]<='9')
ans++;
}
printf("%d",ans);
return 0;
}
稍微一个关于在win下面的快捷键
肯定很多人都是这么写的:
include
using namespace std;
int main()
{
string s;
int ans=0;
while (cin >> s)
ans+=s.length();
cout << ans << endl;
return 0;
}
但是在win下面好像不太好调试的样子?遇到这种情况我们怎么办?
回答是按下ctrl+Z,就相当于直接给他了一个eof,就可以让它最后输出答案了。
因此我决定介绍一个好东西,叫做fgets,作用可以认为和gets函数相同,但是特点是不会造成缓冲区溢出,非常安全。用法如下:
char fgets(char buf,int bufsize, FILE *stream)
看不懂的话可以认为第一个填的是你要读入的那个字符数组,而第二个为最大长度,第三个在OI中可以钦定它为stdin
因此我们可以写出下面的代码:
include <bits/stdc++.h>
using namespace std;
int main()
{
char ch[15];
int ans=0;
fgets(ch,15,stdin);
int len=strlen(ch);
for (int i=0;i<len;i++)
if (isalnum(ch[i]))
ans++;
cout << ans << endl;
return 0;
}
【数据规模与约定】
规定 |s|∣s∣ 表示字符串 ss 的长度(即字符串中的字符和空格数)。
对于 100% 的数据,1 ≤ |s| ≤ 51≤∣s∣≤5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。
1 ≤ |s| ≤ 51≤∣s∣≤5
这说明了什么? 输入的一行里最多只有5个字符!
于是就有个不要循环的做法啦!
include<bits/stdc++.h>
using namespace std;
int main(){
int ans=0;
char c;
if(cin>>c)ans++; //cin自动去除空格换行
if(cin>>c)ans++; //cin在读不到数据时返回0
if(cin>>c)ans++;
if(cin>>c)ans++;
if(cin>>c)ans++;
cout<<ans;
}