asd74827 发表于 2022-3-31 21:21:08

统计个数怎么写这程序

题目描述
小名的好朋友A送给了小B一大包水果,里面有苹果(apple)、桃子(peach)、香蕉(banana),各种水果放在了一个列表里,请你计算一下苹果的个数。
输入格式
输入一行,包含若干个字符串,字符串之间用空格隔开,字符串只可能是apple、peach、banana,至多有 100100 个字符串。
输出格式
输出一个数字,表示苹果的个数。
输入样例 复制
apple peach peach banana banana banana
输出样例 复制
1


这个程序怎么写有大佬指点一下吗?

傻眼貓咪 发表于 2022-3-31 21:21:09

本帖最后由 傻眼貓咪 于 2022-4-1 10:52 编辑

#include <iostream>
#include <map>

int main(){
        std::map<std::string, size_t> fruits = {{"apple", 0}, {"peach", 0}, {"banana", 0}};
        std::string fruit;
        while(std::cin >> fruit) fruits++;
        for(auto const& : fruits){
                std::cout
                        << key
                        << ": "
                        << value
                        << std::endl;
        }
        return 0;
}apple: 1
banana: 3
peach: 2

人造人 发表于 2022-3-31 21:34:15

$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    char buff;
    size_t count = 0;
    while(scanf("%s", buff) == 1) {
      if(!strcmp(buff, "apple")) ++count;
    }
    printf("%lu\n", count);
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
apple peach peach banana banana banana
1
$

asd74827 发表于 2022-4-1 08:16:43

人造人 发表于 2022-3-31 21:34


大佬这个是C++的吗

asd74827 发表于 2022-4-1 08:36:11

人造人 发表于 2022-3-31 21:34


#include <iostream>
#include <string.h>
#include <string>
#include <cstring>
using namespace std;
int main()
{
        string a;
        int conp=0;
        cin>>a>>a>>a>>a>>a>>a;
        for(int i=0;i<6;i++)
        {
                if(a=="apple") conp++;
        }
        cout<<conp;
        return 0;
}

人造人 发表于 2022-4-1 09:36:59

asd74827 发表于 2022-4-1 08:16
大佬这个是C++的吗

这代码哪里像C++了?

yzzc 发表于 2022-4-1 10:12:21

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
    char a,b="apple",c;
    int i,j,count=0;
    for (i = -1; a!='\n'; )
      scanf("%c", &a);
    a = '\0';
    for (i = 0,j=0; a; i++)
    {
      if (a != 32)
            c = a;
      else
      {
            c = '\0';
            if (strcmp(b, c) == 0)
                count++;
            j = 0; c = { 0 };
      }
    }
    printf("%d", count);
    return 0;
}

傻眼貓咪 发表于 2022-4-1 10:31:56

#include <iostream>

int main(){
        std::string fruit;
        int apple = 0;
        while(std::cin >> fruit){
                if(fruit == "apple"){
                        apple++;
                }
        }
        std::cout << apple << std::endl;
        return 0;
}

ba21 发表于 2022-4-1 17:20:31

按照题目要求,这道题并没那么简单。需要用到动态分配内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUF 1024

/*
        从字符串str中获取以空格分割的第1个单词,然后修改指针指向下一个单词,直到'\0'为止,最后置*str==NULL。
        参数:
                str 以'\0'结束的字符串。
        返回值:
                成功 返回单词所在的内存指针。
                失败 返回NULL。
*/
char *getWord(char **str)
{
        char *buf=NULL, c;
        int i, len;

        if(*str==NULL)
        {
                return NULL;
        }

        // 判断字符串长度为0返回
        len = strlen(*str);
        if(len==0)
    {
      return NULL;
    }

    // 删除字符串前面的所有空格
        for(i=0; i<=len; i++)
        {
                if((*str)!=' ')
                {
                  break;
                }               
        }
        *str += i;

        // 再次判断字符串长度为0返回(到了尾部的空格处理)
        len = strlen(*str);
        if(len==0)
    {
      return NULL;
    }

        // 为单词分配内存
        buf = (char*)malloc(sizeof(char)*BUF);
        if(buf==NULL)
        {
                printf("内存分配失败。-3");
                return NULL;
        }

        // 获取单词
        for(i=0; i<=len; i++)
        {
                c = (*str);
                if(c==' ' || c=='\0')
                {
                        buf = '\0';
                        break;
                }
                buf = c;
        }
        if(c=='\0')
        {
                *str = NULL;
        }
        else
        {
                *str = *str+i*sizeof(char);
        }

        return buf;
}

/*
        从用户输入的字符串获取以空格分割的个单词。
        参数:
                *words[] 存储单词的指针数组。
                len *words指针数组的总长度。
        返回值:
                返回所有单词的个数。
*/
int getWords(char *words[], int len)
{
        char *str=NULL, *str_temp=NULL;
        char *buff=NULL;
        int i;

        // 获取字符串
        str = (char *)malloc(sizeof(char)*BUF);
        if(str==NULL)
        {
                printf("内存分配失败-1。");
                return 0;
        }
        i=1;
        while(gets(str)==NULL)
        {
                str = (char *)realloc(str, sizeof(char)*BUF*(++i));
                if(str==NULL)
                {
                        printf("内存分配失败-2。");
                        return 0;
                }
        }

        str_temp = str;
        i=0;
        while( (buff=getWord(&str_temp)) != NULL )
        {
                words = buff;
                i++;
        }
        free(str);
        str=NULL;

        return i;
}

/*
        释放 *words[]指针数组中元素的内存
*/
void freeWords(char *words[])
{
        char *buf;

        while( (buf=*words++)!=NULL )
        {
                free(buf);
        }
}

/*
        统计单词的个数。
        参数:
                *words[] 存储单词的指针数组。
                *word 目标单词。
        返回值:
                返回匹配到的数量。
*/
int countWord(char *words[], char *word)
{
        char *buf;
        int count = 0;

        while( (buf=*words++)!=NULL)
        {
      if(!strcmp(buf, word)) ++count;
    }

        return count;
}

int main(void) {

    char *words={NULL}; // 最多保存100100个字符串
    char word={'\0'};
        int len = 0, count;

        len = getWords(words, 100100);

        printf("请输入要统计的单词(区分大小写):");
        scanf("%s", &word);
        count = countWord(words, word);
        printf("%d\n", count);

        freeWords(words);

    return 0;
}

ROYOR 发表于 2022-4-1 20:27:46

#include <stdio.h>
#include <string.h>
int main() {
    char fruit;
    int count = 0;
    char ch;
    while (1) {
      scanf("%s", fruit);
      ch = getchar();
      if (strcmp(fruit, "apple") == 0)
            count++;
      if (ch == '\n')
            break;
    }
    printf("%d\n", count);


    return 0;
}

人造人 发表于 2022-4-1 21:44:05

傻眼貓咪 发表于 2022-4-1 10:50


学到了新的知识,感谢
^_^

傻眼貓咪 发表于 2022-4-1 22:08:21

人造人 发表于 2022-4-1 21:44
学到了新的知识,感谢
^_^

{:10_254:}{:10_254:}

C丁洞杀O 发表于 2022-4-1 22:31:42

ba21 发表于 2022-4-1 17:20
按照题目要求,这道题并没那么简单。需要用到动态分配内存。

严重怀疑你是不是个大佬(我去,我感觉我白学了啊)

jhq999 发表于 2022-4-2 15:25:59

本帖最后由 jhq999 于 2022-4-2 15:38 编辑

int main()
{
        const long long suiguo={*(long long*)("apple"),*(long long*)("peach"),*(long long*)("banana")};
        int suiguocount={0};

        do
        {
                long long tmp=0;
                scanf("%s",&tmp);
                for (int i = 0; i < 3; i++)
                {
                        if (tmp==suiguo)
                        {
                                suiguocount++;
                                break;
                        }
                }
        } while (getchar()!='\n');
        for (int i = 0; i < 3; i++)
        {
                printf("%s:%d\n",suiguo+i,suiguocount);
        }                           
        return 0;
}
apple peach peach banana banana banana
apple:1
peach:2
banana:3
int main()
{
        const long long suiguo={{*(long long*)("apple")},{*(long long*)("peach")},{*(long long*)("banana")}};
        int suiguocount={0};

        do
        {
                long long tmp={0};
                scanf("%s",tmp);
                for (int i = 0; i < 3; i++)
                {
                        int j = 0;
                        for (; j < 4; j++)
                        {
                                if (tmp!=suiguo)break;
                        }
                        if (4==j)
                        {
                                suiguocount++;
                                break;
                        }
                }
        } while (getchar()!='\n');
        for (int i = 0; i < 3; i++)
        {
                printf("%s:%d\n",suiguo+i,suiguocount);
        }                           
        return 0;
}
apple peach peach banana banana banana apple peach peach banana banana
apple:2
peach:4
banana:5

zhangjinxuan 发表于 2022-8-16 12:16:40

#include <stdio.h>
using namespace std;
int main()
{
       //freopen("fruit.in","r",stdin);
       //freopen("fruit.out","w",stdout); 本地测试加上,否则死循环,online judge做题没事
        char s;
        int cnt=0;
        while (scanf("%s",s))//scanf读入失败返回0
                if (s=='a')//第一个字符是a一定是apple
                        ++cnt;
        printf("%d",cnt);
      return 0;
}

柿子饼同学 发表于 2022-8-16 19:11:02

// C++ 写的
#include <bits/stdc++.h> // 万能文件头
using namespace std;

string fruit; // 每次读入水果名
int ans = 0; // 答案

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0); // 写了 9-10 行会大大加快 cin 和 cout 的速度, 缺点是无法使用 scanf 和 printf
   
    while(cin >> fruit){ // 如果后面还有, 就一直读入
      if(fruit == "apple") ans++; // 如果是 apple 就加一
    }

    cout << ans << endl; // 最后输出答案
   
    return 0;// 结束
}

柿子饼同学 发表于 2022-8-16 19:12:48

傻眼貓咪 发表于 2022-4-1 10:50


这个是什么版本啊{:10_245:}

傻眼貓咪 发表于 2022-8-16 20:19:24

柿子饼同学 发表于 2022-8-16 19:12
这个是什么版本啊

你是说 auto const& : fruits 这句代码?
版本好像是 C++17

ExiaGN001 发表于 2022-8-16 23:01:32

以下代码只适用于使用in/out文件评测情况下

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    int ans=0;
    while(cin.get()!=EOF)
    {
      cin.unget();
      cin>>s;
      if(s=='a')ans++;
    }
    cout<<ans;
    return 0;
}

柿子饼同学 发表于 2022-8-17 09:44:33

傻眼貓咪 发表于 2022-8-16 20:19
你是说 auto const& : fruits 这句代码?
版本好像是 C++17

用不了啦{:10_266:}
只能用迭代器->first
页: [1] 2
查看完整版本: 统计个数怎么写这程序