博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串中特定单词逆序
阅读量:3984 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
CLOSE_WAIT和TIME_WAIT
查看>>
在C++中使用Lua
查看>>
在Dll中调用自身的位图资源
查看>>
IP校验和详解
查看>>
C++中使用Mongo执行count和distinct运算
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
C++获取文件大小常用技巧分享
查看>>
未来5年大机遇:做贩卖多巴胺的超级玩家
查看>>
30 岁之前,应当学会哪些技能?
查看>>
关于AIS编码解码的两个小问题
查看>>