程序应包括以下内容:
•一种用于存储名为Gift_Bag_Type
的礼品袋的数据类型。数据类型应该能够最多可储存15
份礼物,每份礼物包含一份string
。
•具有Gift_Bag_Type
参数的read_gifts
子程序。子程序应允许用户输入最多15
礼物以存储在参数。用户通过输入"0"结束输入;CCD_ 7";或通过输入15
礼物。
•具有Gift_Bag_Type
参数gift_bag
和character
参数letter
的print_gifts_containing
子程序。
子程序应打印来自CCD_ 14的所有礼物作为内容标志。如果不包括礼物字母,";CCD_ 15";应打印。
这就是它在终端中的样子:
Enter gifts in bag:
car
table
tv
acorn
tools
perfume
apple
DONE
Enter letter: e
Gifts containing e: table, perfume, apple
Enter gifts in bag:
DONE
Enter letter: a
Gifts containing a: none
我在制作另一个子程序print_gifts_containing
时遇到问题。我想我必须有一个for loop
,在for循环中,我有一个if statement
,但我真的不知道如何执行它,这就是为什么我在这里问这个问题,因为我需要帮助。关于如何完成这个程序有什么帮助吗?
请注意,不应修改我的int main
。只有我的subprograms
。我只评论了一件事,这样我的程序就可以编译了。
这是我迄今为止的代码:
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
struct Gift_Bag_Type {
vector<string> gifts;
};
//function to read gifts of input gift
void read_gifts(Gift_Bag_Type & gift_bag) {
string line;
while ((line != "DONE") && (gift_bag.gifts.size() != 14)) {
getline(cin, line);
gift_bag.gifts.push_back(line);
}
}
void print_gifts_containing (Gift_Bag_Type & gift_bag,
char const letter) {
for (int i {}; i < gift_bag.gifts.size(); ++i) {
//if-statement here
}
}
int main() {
Gift_Bag_Type gift_bag;
char letter;
cout << "Enter gifts in bag: " << endl;
read_gifts(gift_bag);
cout << "Enter letter: ";
cin.get(letter);
cout << "Gifts containing " << letter << ": ";
//print_gifts_containing(gift_bag, letter);
return 0;
}
看起来你在寻找std::string::find
,它有一个重载,可以让你找到字符串中第一个出现的字符。如果找不到字符,则返回npos
。
一个简单的例子:
#include <string>
#include <iostream>
int main() {
std::string foo = "hello";
if (foo.find('e') != std::string::npos) {
std::cout << "Found 'e'" << std::endl;
}
}
此外,当您对字符串的vector
进行迭代时,您的循环工作过于繁重。C++让你努力工作。如果可以的话,让它为你做同样的事情。
for (auto &s : gift_bag.gifts) {
...
}