本关任务:设计一个程序,让用户输入一行句子,数出句子中有多少个单词并输出,再让用户输入一串数字表示单词重新排序的顺序,最后按用户设定的顺序来输出一行新的句子。要求所有数组都只能用new来定义。 编程要求 根据提示,在右侧编辑器补充代码,用户输入的句子里只包含字母和空格(句子末尾没有空格),以回车完成输入,该句子最多100个字符,句子里最多10个单词。用户输入的一串数字是正常表示单词顺序的,不用考虑异常情况。 测试说明 平台会对你编写的代码进行测试: 测试输入: This is a good day to work 6543210 预期输出: 7 work to day good a is This
时间: 2023-06-14 10:02:33 浏览: 438
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence); // 输入一行句子,包含空格
int wordCount = 1; // 初始化单词数为1,因为最后一个单词后面没有空格
for (int i = 0; i < sentence.length(); i++) {
if (sentence[i] == ' ') {
wordCount++; // 遇到空格就说明又有一个单词
}
}
cout << wordCount << " "; // 输出单词数
int* order = new int[wordCount]; // 动态分配一个int数组,用于存储单词顺序
for (int i = 0; i < wordCount; i++) {
cin >> order[i]; // 循环读入单词顺序
}
string* words = new string[wordCount]; // 动态分配一个string数组,用于存储单词
int start = 0; // 记录单词的起始位置
for (int i = 0; i < wordCount; i++) {
int end = sentence.find(' ', start); // 找到单词的结束位置
if (end == string::npos) { // 如果是最后一个单词
end = sentence.length(); // 结束位置为句子末尾
}
words[i] = sentence.substr(start, end - start); // 截取单词并存储到数组中
start = end + 1; // 更新单词的起始位置
}
for (int i = 0; i < wordCount; i++) {
cout << words[order[i]]; // 按照用户设定的顺序输出单词
if (i != wordCount - 1) { // 如果不是最后一个单词,则输出空格
cout << " ";
}
}
delete[] order; // 释放动态分配的内存
delete[] words;
return 0;
}
```
阅读全文