问题描述
读入一行文本,包含若干个单词(以空格间隔,或到文本结束),将其中以A开头的单词与以N结尾的单词,用头尾交换的方法予以置换。
要求实现函数
void exchange(const char *pIn, char *pOut);
输入:pIn 输入的文本
输出:pOut 输出的文本(pOut空间已经分配,请直接写入,空间长度和pIn长度一致)
示例
输入:“AM I OLDER THAN YOU”
输出:“THAN I OLDER AM YOU”
思路
将pIn字符串中的每个单词装入二维数组a[10][10],再对二维数组中的以A开头的单词与以N结尾的单词进行置换。
参考代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void exchange(const char *pIn, char *pOut);
int main(){
const char *pIn = "Am I A OLDER THAN YOU";
char *pOut = (char *)malloc(sizeof(strlen(pIn)));
exchange(pIn, pOut);
puts(pIn);
puts(pOut);
return 0;
}
void exchange(const char *pIn, char *pOut){
char a[10][10], temp[10]; //数组a装每个单词
int i = 0, num = -1, k = 0;
while(pIn[i] != '\0'){
num++;
k = 0;
while(pIn[i] != ' ' && pIn[i] != '\0'){
a[num][k++] = pIn[i++];
}
a[num][k] = '\0';
i++;
}//将每个单词装入二维数组a中
int head = 0, tail = num; //一共有num+1个单词
while(head < tail){
while(a[head][0] != 'A' && head < tail){
head++;
}
while(a[tail][strlen(a[tail]) - 1] != 'N' && head < tail){
tail--;
}
if(head < tail){
strcpy(temp, a[head]);
strcpy(a[head], a[tail]);
strcpy(a[tail], temp);
head++;
tail--;
}
}
for(i = 0; i<=num; i++){
strcat(pOut, a[i]);
strcat(pOut, " ");
}
}