#include<iostream>
#include<string>
using namespace std;
void SentenceReverse(string s) //句子中的单词逆序输出
{
string spit = " ,.!?"; //单词间可能的分隔符
int front, end;
front = end = s.length()-1; //从句子末尾开始
while (front >= 0)
{
if (s[front] != spit[0] && s[front] != spit[2])
front--;
else
{
for (int i = front + 1; i <= end; i++)//碰到分割符则输出单词
cout << s[i];
cout << " ";
end = front - 1;
front--;
}
}
if (end>=0)
for (int i = front + 1; i <= end; i++) //碰到分割符则输出单词
cout << s[i];
}
void SentenceReverse2(string sentence) //逆序输出句中单词
{
int front, end; //下标确定单词的范围
string split = " ,.?!"; //可能的分隔符
front = end = sentence.length()-1; //从句子末尾开始
while (front >= 0)
{
if (sentence[front] != split[0]) //没遇到分隔符front前移
front--;
else
{
for (int i = front + 1; i <= end; i++) //碰到分隔符则输出单词
cout << sentence[i];
cout << " ";
front--; //将front与end同时前移
end = front;
}
}
for (int i = front + 1; i <= end; i++)
cout << sentence[i]; //将最后一个单词输出
}
void Merge(int *data, int start, int mid, int end) //将从开始到结束的数组从mid部分成两部分,将两部分按从大到小拼成一个数组
{
int len1 = mid - start + 1; //左边数组的长度
int len2 = end - mid; //右边数组的长度
int i, j, k;
int *left = new int[len1];
int *right = new int[len2];
for (i = 0; i < len1; i++)
left[i] = data[start + i];
for (i = 0; i < len2; i++)
right[i] = data[mid + 1+i];
i = j = 0;
for (k = start; k < end; k++) //循环来判定将两个数组按从大到小来排序
{
if (i == len1 || j == len2) //当一个数组判定完了之后,直接跳出循环
break;
else
{
if (left[i] < right[j])
data[k] = left[i++];
else
data[k] = right[j++];
}
}
while (j<len2) //这个时候判断到底是哪一个数组没有结束,将剩下的数全部放到data数组之中
data[k++] = right[j++];
while (i < len1)
data[k++] = left[i++];
delete[]left; //结束释放掉左右数组的空间
delete[]right;
}
void MergeSort(int *data, int start,int end)
{
int mid = (start + end) / 2;
if (start < end) //将数组不断分割直到分成每个数组只含有一个数为止
{
MergeSort(data, start, mid);
MergeSort(data, mid + 1, end);
Merge(data, start, mid, end); //开始不断的将已经排好序的小数组进行合并,合并成一个大数组
}
}
void ShowData(int *data, int len) //显示数组的元素
{
for (int i = 0; i < len; i++)
{
cout << data[i] << " ";
}
}
int main()
{
string sentence = "i am a brilliant boy.";
// SentenceReverse2(sentence);
int data[] = { 1, 2, 5, 4, 3, 9, 6, 7, 8, 10 };
int len = sizeof(data) / sizeof(int);
MergeSort(data, 0, len - 1);
ShowData(data, len);
return 0;
}
句子中的单词逆序输出和归并排序
最新推荐文章于 2023-01-18 22:22:51 发布