本文共 1376 字,大约阅读时间需要 4 分钟。
题目是:
读入一行文本,包含若干个单词(以空格间隔,%结尾)。将其中以 A 开头的单词与以 N 结尾的单词,用头尾交换的办法予以置换。先看源程序:
// T.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <string>using std::string;using namespace std;void fn(string &);
void reverse(string&, string::size_type, string::size_type); int _tmain(int argc, _TCHAR* argv[]){ string str; cout << "input a string : " << endl; getline(cin, str); fn(str); cout << str; return 0;}void fn(string& str)
{ if (str.empty()) return; else { string::size_type in = str.size(); for (string::size_type ix = 0; ix != in; ++ix) {// 找单词起始的的A或a if ((str[ix] == 'a' || str[ix] == 'A') && (str[ix - 1] == ' ' || ix == 0)) { // 找以A或a开始单词的结尾N或n string::size_type iy; for (iy = ix; str[iy] != ' ' && iy != in; ++iy); if (str[iy - 1] != 'n' || str[iy - 1] != 'N' ) { reverse(str,ix,iy - 1); } } } }}void reverse(string& str, string::size_type ix, string::size_type iy)
{ if (ix == iy) return; else { string::value_type temp = str[ix]; for (string::size_type x = ix; x != iy; ++x) { str[x] = str[x + 1]; } str[x] = temp; reverse(str, ix, iy - 1); }}reverse函数是一个利用递归逆序字符串的函数。它的思想是先将长度为n的字符串首元素保存到临时变量temp,然后将剩余的字符串前移,再将临时变量放在字符串尾,最后调用reverse函数将从字符串首开始n-1长度的字符串逆序。
fn的思想是先找到以字符a或A开始的串,然后判断这个单词是否以n或N结尾。如果是,则将该单词逆序。程序我试着用了下最近才看的STL,有点收获呵呵。我发现string的使用基本和数组一致。string的元素可以用char、int等内置类型接收,也可以用string::value_type。string的长度可以使用string::size_type。还有getline函数不会提取流中的回车,但可以提取空格。
转载地址:http://rlpui.baihongyu.com/