c++关任务:设计一个程序,让用户输入一行句子,数出句子中有多少个单词并输出,再让用户输入一串数字表示单词重新排序的顺序,最后按用户设定的顺序来输出一行新的句子。要求所有数组都只能用new来定义 指针做法
时间: 2024-12-18 17:30:42 浏览: 15
在C++中,设计这样的程序需要使用`cin`, `cout`, 指针以及动态内存分配。我们可以创建一个简单的步骤来进行操作:
1. 首先,创建一个函数用于接收用户的输入,将字符串分割成单词,并计算单词数量。这里可以使用`std::string`和`std::istringstream`。
```cpp
#include <iostream>
#include <sstream>
std::vector<std::string> splitSentence(const std::string& sentence) {
std::istringstream iss(sentence);
std::vector<std::string> words;
std::string word;
while (iss >> word) {
words.push_back(word);
}
return words;
}
```
2. 然后,让用户输入单词的数量和重新排列的顺序。假设我们用一个整数向量来存储排序索引,使用`std::vector<int>`。
```cpp
int main() {
int numWords, indexCount;
std::cout << "Enter the number of words in your sentence: ";
std::cin >> numWords;
std::vector<int> sortIndices(numWords);
for (int i = 0; i < numWords; ++i) {
std::cout << "Enter index for word " << i+1 << ": ";
std::cin >> sortIndices[i];
}
```
3. 接下来,动态分配一个字符串数组来存储原始的单词,并存储它们的新位置。
```cpp
std::string* originalWords = new std::string[numWords];
for (size_t i = 0; i < numWords; ++i) {
std::getline(std::cin, originalWords[i]);
}
std::vector<std::string*> rearrangedWords;
rearrangedWords.reserve(numWords);
for (size_t i = 0; i < numWords; ++i) {
rearrangedWords.push_back(&originalWords[sortIndices[i]]);
}
```
4. 最后,按照新顺序输出排好序的句子。
```cpp
std::string sortedSentence;
for (auto word : rearrangedWords) {
sortedSentence += *word + " ";
}
sortedSentence.pop_back(); // 移除多余的空格
// 打印结果
std::cout << "Sorted sentence: " << sortedSentence << std::endl;
// 清理内存
for (auto word : rearrangedWords) {
delete[] word;
}
delete[] originalWords;
return 0;
}
```
阅读全文