将以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移动到第一个交换单词的位置,将第二个交换单词赋给pOut
		if (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;
}

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值