C++-如何计算同一字符串在列表中出现的次数
C++ - How to count how many times occur the same string in a list
我在谷歌和stackoverflow上搜索了很多,但都找不到答案。事实上,我正在读一本C++书(C++初级读本第五版(,他们让我做一个练习。
"编写一个程序,读取几个事务,并计算每个ISBN发生的事务数量"(控制台项目(
这是我的代码atm:
Sales_item currentItem, item;
if (cin >> currentItem)
{
int cnt = 1;
while (cin >> item)
{
if (currentItem.isbn() == item.isbn())
{
++cnt;
}
else
{
cout << currentItem.isbn() << " occurs " << cnt << " times " << endl;
cnt = 1;
currentItem = item;
}
}
cout << item.isbn() << " occurs " << cnt << " times " << endl;
}
我不会解释交易是如何运作的,所以我会用另一种方式问它。
我在控制台中键入6个(或更多(随机字符串,例如:
101A
102A
101A
101A
103A
102A
我希望结果(输出(是:
101A occurs 3 times.
102A occurs 2 times.
103A occurs 1 times.
你会怎么做?
使用std::map而不是list会更容易。
int main()
{
map<string,int> stringMap;
for (int i=0;i<3;i++)
{
cout<<"Enter string: ";
string s;
cin>>s;
if(stringMap.find(s)!=stringMap.end())
{
stringMap[s]++;
}
else
{
stringMap[s]=1;
}
}
for (map<string,int>::const_iterator itr = stringMap.cbegin(); itr!=stringMap.cend(); ++itr)
{
if(itr->second > 1)
cout<<itr->first << " occurs "<<itr->second<<" times"<<endl;
else
cout<<itr->first << " occurs "<<itr->second<<" time"<<endl;
}
return 0;
}
这样的问题有多种方法,所以最好的方法取决于您的约束。我的方法是:
while(GetInputString(str)) {
myStruct* ptr = existingList.Find(str);
if (!ptr) {
existingList.Add(str);
} else {
ptr->IncrementCount();
}
}
我试着不为你解决你的问题——希望答案能给你一个模板。。。
#include <iostream>
#include <vector>
#include "Sales_item.h"
using namespace std;
void book_transactions(string isbn, int count);
int main()
{
vector<Sales_item> book_vec;
Sales_item book;
int total_transactions = 1;
// Reads in Sales_item objects
while (cin >> book)
{
book_vec.push_back(book);
}
// Compares ISBNs in vector, if two isbns are equal total transactions increases
for (int i = 0; i < book_vec.size() - 1; i++)
{
if (book_vec[i].isbn() == book_vec[i+1].isbn())
{
total_transactions = book_vec[i].get_units_sold() + book_vec[i+1].get_units_sold();
book_transactions(book_vec[i].isbn(), total_transactions);
}
}
}
void book_transactions(string isbn, int count)
{
cout << "ISBN: " << isbn << " " << "Transactions: " << count << endl;
}
- 我进入Sales_item.h类,添加了一个方法来获取售出的单元数。private下已经有一个类成员(未签名的返回类型(。我刚刚创建了一个getter,然后创建了Sales_items的向量。这个解决方案似乎奏效了。我确信预期的问题不适用于N组sales_items,但这应该是一个"管道胶带"解决方案。在这一点上没有必要到处乱投。一个简单的矢量数组和一个比较相邻对象的算法可以很好地工作
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 在 c++ 中多次更改字符串列表
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何将包含括号的字符串列表平展为单个列表?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- (C++) 字符串文本与参数列表不匹配
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 如何存储字符串列表
- 如何在数组或链接列表中查找特定字符串
- C++ EnumWindows,将列表存储在字符串数组中
- 给定字符串和单词 S 的列表,检查列表中是否存在 S
- C 需要帮助的作业程序,该程序在文件列表中读取并在每个双重的双重列表中添加一个字符串
- 查找可变参数列表的字符串格式指定符
- 在链接列表中添加字符串的简单方法
- 嵌套列表(字符串向量的向量)初始化失败
- 通过单词列表将两个字符串移动以比较每个单词
- 链接的列表字符串分类问题
- 穿过链接列表以查找字符串