1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 将以A开头的单词与以N结尾的单词 用头尾交换的办法予以置换。

将以A开头的单词与以N结尾的单词 用头尾交换的办法予以置换。

时间:2018-11-22 15:26:15

相关推荐

将以A开头的单词与以N结尾的单词 用头尾交换的办法予以置换。

题目:读入一行文本,包含若干个单词(以空格间隔,或文本结束)。将其中的以A开头的单词与以N结尾的单词,用头尾交换的办法予以置换。

实例:

输入:“AM I OLDER THAN YOU”

输出:“THAN I OLDER AM YOU”

算法描述:1)分别记录以A开头单词的首字符位置pre1和尾字符位置post1,以N结尾单词的首字符位置pre2和尾字符位置post2

2)将字符串pIn的单词赋给字符串pOut。若pIn遇到pre1将pre2-post2上的字符赋值给pOut,若遇到pre2则将pre1-post1上的字符赋值给pIn。

#include<stdio.h>#include<stdlib.h>void exchange(const char* pIn, char* pOut);int main() {char pIn[] = "AM I OLDER THAN YOU";char* pOut = (char*)malloc(sizeof(pIn));exchange(pIn, pOut);printf("%s\n", pIn);printf("%s", pOut);free(pOut);return 0;}void exchange(const char* pIn, char* pOut) {int pre1, post1, pre2, post2;//分别记录首字符为A的单词和尾字符为N的单词int i = 0;while (pIn[i] != '\0') {if (pIn[i] == 'A' && (i == 0 || pIn[i - 1] == ' ')) {pre1 = i;while (pIn[i] != ' ') i++;post1 = i - 1;}//记录首字符为A的单词在字符串中的首尾索引if (pIn[i] == 'N' && (pIn[i + 1] == ' ' || pIn[i + 1] == '\0')) {post2 = i;while (pIn[i] != ' ') i--;pre2 = i + 1;i = post2;}//记录尾字符尾N的单词在字符串中的首尾索引i++;}i = 0;char* p = pOut;while (pIn[i]!= '\0') {if (i == pre1) {for (int j = 0; j < post2 - pre2 + 1; j++)*p++ = pIn[pre2 + j];i = post1 + 1;}//pIn移动到第一个交换单词的位置,将第二个交换单词赋给pOutif (i == pre2) {for (int j = 0; j < post1 - pre1 + 1; j++)*p++ = pIn[pre1 + j];i = post2 + 1;}//pIn移动到第二个交换单词的位置,将第一个交换单词赋给pOut//交换后将pIn移动到第二个交换单词后if (pIn[i] == '\0') break;*p++ = pIn[i++];//非交换单词,直接赋给pOut}*p = pIn[i];return;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。