2 条题解

  • 4
    @ 2023-10-2 23:11:35

    和上位同学写法撞了,不过判断状态更新则单词计数这个部分,可以有个小优化,即将初始状态设为待读入,每次更新为单词读入状态则计数,就不需要对原字符串进行修改了

    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
    	int a[1000]={0};
    	int f=1,k=0;//k记单词数,f=1为待读入单词状态,f=0为单词读入状态
    	string s;
    	getline(cin,s);
    	for(int i=0;i<s.size();i++){//遍历字符串
    		a[s[i]]++;//字母计次
    		if((s[i]==' '||s[i]==',')&&f==0)
    		f=1;//若状态为读入单词,且开始读入' '或',',则更新状态为单词待读入
    		else if(s[i]!=' '&&s[i]!=','&&f==1){
    			f=0;//若状态为单词待读入且开始读入字母,则更新状态为单词读入
    			k++;//单词计数
    		}
    	}
    	cout<<k<<endl;
    	for(char i='a';i<='z';i++)//遍历字母表
    	if(a[i]) cout<<i<<' '<<a[i]<<endl;//若该字母有计次则输出
    }
    
    • 2
      @ 2023-7-30 17:21:42

      兄弟们,这题其实非常简单,你把它拆成两道题,一个是p361的统计字母,这里不必多言,另一个是统计单词数,单词间只由空格或逗号隔开:

      1. 因为每个单词间会有空格或逗号隔开,所以在读取到字母后若读取到空格或逗号,那么单词数就可以加一。注意,最后一个单词后可能啥也没有,那我们就没有条件创造条件,给字符串后面自动添加一个空格或逗号,然后再开始你的统计
      2. 因为可能出现连着的好几个空格(逗号),所以直接统计空格和逗号数肯定是不行的,我们可以引入一个变量来表示当前字符的前一个字符的状态,如果状态是字母那么可以给单词数加一,如果是符号就算了,记得更改变量的状态
      • 1

      信息

      ID
      381
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      307
      已通过
      43
      上传者