统计个数怎么写这程序
题目描述小名的好朋友A送给了小B一大包水果,里面有苹果(apple)、桃子(peach)、香蕉(banana),各种水果放在了一个列表里,请你计算一下苹果的个数。
输入格式
输入一行,包含若干个字符串,字符串之间用空格隔开,字符串只可能是apple、peach、banana,至多有 100100 个字符串。
输出格式
输出一个数字,表示苹果的个数。
输入样例 复制
apple peach peach banana banana banana
输出样例 复制
1
这个程序怎么写有大佬指点一下吗? 本帖最后由 傻眼貓咪 于 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 $ 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
$
人造人 发表于 2022-3-31 21:34
大佬这个是C++的吗
人造人 发表于 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;
} asd74827 发表于 2022-4-1 08:16
大佬这个是C++的吗
这代码哪里像C++了?
#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;
} #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;
} 按照题目要求,这道题并没那么简单。需要用到动态分配内存。
#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;
}
#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 10:50
学到了新的知识,感谢
^_^
人造人 发表于 2022-4-1 21:44
学到了新的知识,感谢
^_^
{:10_254:}{:10_254:} ba21 发表于 2022-4-1 17:20
按照题目要求,这道题并没那么简单。需要用到动态分配内存。
严重怀疑你是不是个大佬(我去,我感觉我白学了啊) 本帖最后由 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 #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;
} // 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-4-1 10:50
这个是什么版本啊{:10_245:} 柿子饼同学 发表于 2022-8-16 19:12
这个是什么版本啊
你是说 auto const& : fruits 这句代码?
版本好像是 C++17 以下代码只适用于使用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-16 20:19
你是说 auto const& : fruits 这句代码?
版本好像是 C++17
用不了啦{:10_266:}
只能用迭代器->first
页:
[1]
2