C++设计一个程序,让用户输入一行句子,数出句子中有多少个单词并输出,再让用户输入一串数字表示单词重新排序的顺序,最后按用户设定的顺序来输出一行新的句子。测试输入: This is a good day to work 6543210 预期输出: 7 work to day good a is This
时间: 2023-06-14 09:02:38 浏览: 116
以下是实现该程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORDS 50 // 句子中最多包含的单词数量
#define MAX_WORD_LEN 20 // 单个单词最长长度
int count_words(char *str, char words[MAX_WORDS][MAX_WORD_LEN]); // 函数声明,用于计算单词数量和保存单词
int main() {
char sentence[MAX_WORDS * MAX_WORD_LEN]; // 声明一个足够大的字符串用于存储整个句子
char words[MAX_WORDS][MAX_WORD_LEN]; // 声明一个二维数组用于存储句子中的单词
int num_words, i, j, order[MAX_WORDS];
printf("请输入一行句子:\n");
fgets(sentence, MAX_WORDS * MAX_WORD_LEN, stdin); // 读取整行句子,包括空格
num_words = count_words(sentence, words); // 计算句子中的单词数量,并将单词保存到words数组中
printf("句子中包含 %d 个单词:\n", num_words);
for (i = 0; i < num_words; i++) {
printf("%s ", words[i]); // 输出每个单词
}
printf("\n请输入单词的新顺序,用空格分隔:\n");
for (i = 0; i < num_words; i++) {
scanf("%d", &order[i]); // 读取每个单词的新位置
}
printf("重新排序后的句子为:\n");
for (i = 0; i < num_words; i++) {
printf("%s ", words[order[i] - 1]); // 按照新顺序输出每个单词
}
printf("\n");
return 0;
}
// 计算句子中的单词数量,并将单词保存到words数组中
int count_words(char *str, char words[MAX_WORDS][MAX_WORD_LEN]) {
int num_words = 0, i = 0, j = 0, len = strlen(str);
while (i < len && num_words < MAX_WORDS) {
if (str[i] == ' ' || str[i] == '\n') { // 遇到空格或换行符,表示一个单词结束
words[num_words][j] = '\0'; // 在单词末尾添加字符串结束符
num_words++; // 单词数量加1
j = 0; // 重新开始下一个单词的存储
} else {
words[num_words][j] = str[i]; // 将字符加入当前单词中
j++;
}
i++;
}
return num_words;
}
```
运行程序后,按照题目要求输入一行句子和单词的新顺序,即可得到重新排序后的句子。
阅读全文