小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘Fixedsys’。
(编译环境:windowsXP_sp3 + Visual_C++_2008,保证编译成功,正常运行。)
7. 读入一行文本,包含若干个单词(以空格间隔,%结尾)。将其中以 A 开头的
单词与以 N 结尾的单词,用头尾交换的办法予以置换。
代码如下:
#include<iostream>
#include<string>
using namespace::std;
void main()
{
string str; //定义一个字符串str
cout<<"Plese input some words to the array"<<endl;
cin.clear();
cin.sync();
getline(cin, str); //一次性读入用户输入的文本
char *s = NULL; //用于存贮文本
char *t = NULL; //用于对文本的操作
char *m = NULL; //用于记录临时文本
char temp = 0; //用于记录临时的字符
s = const_cast<char*>(str.c_str()); //将文本转化为字符串并存贮到s中
t = s; //将s的值赋给t,以便于用t进行操作
while(*t !='%') //如果文本没有结束,则进入循环体内
{
/*
如果遇到空格符,则令t读下一个字符
*/
if(*t==' ')
t++;
/*
如果遇到字符a开头的单词,则首尾交换
*/
else if(*t=='a')
{
m = t;
while(*t!=' '&&*t!='%')
t++;
temp = *--t;
*t = 'a';
*m = temp;
t++;
}
/*
否则指针t会一直读到单词末尾,如果遇到以n结尾,则首尾交换
*/
else
{
m = t;
while(*t!=' '&&*t!='%')
t++;
if(*--t=='n')
{
temp = *m;
*m = 'n';
*t = temp;
t++;
}
else
t++;
}
}
cout<<"what you type is:"<<s<<endl; //输出经过整理后的新文本s
system("pause");
}