句子中的单词逆序输出和归并排序

来源:互联网 发布:java 提取html文本 编辑:程序博客网 时间:2024/04/29 16:08
#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++];elsedata[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;}

0 0