题目:有一个单词管理类,能存放10个单词,有10个单词存放在二维指针数组words中。编写一个程序,(1)根据用户的输入找出所有从首字母开始与之从前向后匹配的单词(包含即可),并最后输出个数,如果没有包含匹配的,只需输出0;(2)输入编号1-10,输出对应的单词。
时间: 2023-09-09 21:05:37 浏览: 143
### 回答1:
答案:
这是一个很有趣的问题!我们可以通过遍历二维指针数组中的所有单词,并与用户输入的字符串进行匹配来找出所有匹配的单词。具体实现可以使用字符串的substr函数,先将用户输入的字符串拆分成从首字母开始逐个往后的所有子串,然后再跟二维指针数组中的每个单词进行匹配,如果发现匹配的单词,则将其编号存入一个数组中,最后统计数组中元素的个数即为总数,同时输出对应的所有单词编号。
下面是示例代码(假设二维指针数组words已经定义好了):
#include <iostream>
#include <string>
using namespace std;
string words[10] = {"hello", "hi", "hey", "how", "are", "you", "doing", "today", "good", "bye"};
int main()
{
string input;
cin >> input;
int nums[10], count = 0;
// 找出所有匹配的单词编号
for (int i = 0; i < 10; i++) {
for (int j = 0; j < input.length(); j++) {
if (input.substr(0, j+1) == words[i].substr(0, j+1)) {
// 匹配成功,将编号存入数组中
nums[count++] = i+1;
break;
}
}
}
// 输出匹配的个数
cout << count << endl;
// 输出对应的单词
int index;
cin >> index;
if (index >=1 && index <= 10)
cout << words[index-1] << endl;
return 0;
}
其中,字符串的substr函数是从第一个参数指定的位置开始取出第二个参数指定长度的子串。最后输出匹配的个数以及对应的单词即可。
### 回答2:
下面是一个实现这个需求的示例程序:
```cpp
#include <iostream>
#include <cstring>
const int WORD_COUNT = 10;
const int WORD_LENGTH = 20;
class WordManager {
private:
char* words[WORD_COUNT];
public:
WordManager() {
for (int i = 0; i < WORD_COUNT; i++) {
words[i] = new char[WORD_LENGTH];
}
}
~WordManager() {
for (int i = 0; i < WORD_COUNT; i++) {
delete[] words[i];
}
}
void SetWord(int index, const char* word) {
strncpy(words[index], word, WORD_LENGTH);
words[index][WORD_LENGTH - 1] = '\0'; // 确保字符串以null结尾
}
int FindMatchWords(const char* input) {
int count = 0;
for (int i = 0; i < WORD_COUNT; i++) {
if (strstr(words[i], input) == words[i]) {
count++;
}
}
return count;
}
const char* GetWord(int index) {
return words[index];
}
};
int main() {
WordManager wordManager;
// 设置单词
wordManager.SetWord(0, "apple");
wordManager.SetWord(1, "ball");
wordManager.SetWord(2, "cat");
wordManager.SetWord(3, "door");
wordManager.SetWord(4, "elephant");
wordManager.SetWord(5, "football");
wordManager.SetWord(6, "game");
wordManager.SetWord(7, "hat");
wordManager.SetWord(8, "ink");
wordManager.SetWord(9, "jack");
// 输入用户查询的字符串
char input[WORD_LENGTH];
std::cout << "请输入一个字符串: ";
std::cin.getline(input, WORD_LENGTH);
// 查找匹配的单词并输出个数
int matchCount = wordManager.FindMatchWords(input);
std::cout << "从首字母开始与输入字符串匹配的单词数量:" << matchCount << std::endl;
// 输入编号并输出对应的单词
int index;
std::cout << "请输入一个编号(1-10): ";
std::cin >> index;
std::cout << "编号 " << index << " 对应的单词是:" << wordManager.GetWord(index - 1) << std::endl;
return 0;
}
```
运行示例:
```
请输入一个字符串: ap
从首字母开始与输入字符串匹配的单词数量:2
请输入一个编号(1-10): 3
编号 3 对应的单词是:cat
```
### 回答3:
这是一个单词管理类的程序,它能够存放10个单词。这些单词被储存在一个二维指针数组words中。现在需要编写一个程序来实现以下功能:
1. 根据用户的输入,找出所有从首字母开始与之从前向后匹配的单词。如果有匹配的单词,输出匹配的个数;如果没有匹配的单词,输出0。
2. 根据用户输入的编号(1-10),输出对应的单词。
下面是解答:
1. 首先,要求用户输入一个字母,假设用户输入的字母存放在变量letter中。
2. 创建一个变量matchCount,用于记录匹配的个数。初始值为0。
3. 使用循环遍历二维指针数组words中的每个单词。
4. 对于当前遍历到的单词,使用strcmp函数比较该单词的首字母与用户输入的字母是否相等。
5. 如果相等,则将matchCount加1。
6. 循环结束后,输出matchCount的值。
7. 如果matchCount为0,则输出0。
8. 对于第二个功能,要求用户输入一个编号(1-10),假设用户输入的编号存放在变量num中。
9. 使用num作为索引,找到对应的单词。
10. 输出该单词。
以上就是解答的过程,实际上实现该功能的代码可能更加复杂,会涉及到判断用户输入是否合法、处理空指针等情况。这里只是提供了一个简单的思路。
阅读全文