编程题——逆置字符串

    xiaoxiao2022-07-05  180


    编程题——逆置字符串


    题目描述: 将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割

    示例: 输入 I like beijing. 输出 beijing. like I


    这里提供三种思路,如有错误欢迎指正:


    程序代码如下:


    #include <iostream> #include <string> using namespace std; #if 0 /*创建一个新的字符串str2来保存逆置后的字符串 *利用string的insert来控制插入位置 *从str1第一个单词开始,每个单词都从str2首位开始向后插入 *str1中遍历到空格时相应地在str2前面插入空格*/ int main() { int j = 0;//控制插入位置 string str1,str2; getline(cin, str1); for (int i = 0; i < str1.size(); ++i)//遍历str1 { if (str1[i] == ' ')//遇到空格时将j置0,同时在str2首位插入空格 { j = 0; str2.insert(j, 1, ' '); } else//普通单词直接从str首位开始向后插入 { str2.insert(j, 1, str1[i]); ++j; } } cout << str2 << endl; return 0; } #endif #if 0 /*使用第二种的方法其实理解起来更加简单 *首先将整个字符串逆置 *然后将每个单词本身逆置回原来的样子即可 */ int main() { string str1; getline(cin, str1); reverse(str1.begin(), str1.end());//逆置整个字符串 auto start = str1.begin();//用来遍历字符串 while (start != str1.end())//遍历字符串 { auto end = start;//用来指向每个单词末尾 while (end != str1.end() && *end != ' ')//指向单词末尾 ++end; reverse(start, end);//逆置单个单词 if (end == str1.end())//控制start移动,避免越界 start = end; else start = end + 1; } cout << str1 << endl; return 0; } #endif #if 1 /*第三种方法是利用了cin读取时会被空格隔开的特点 *只需间隔读取后加空格并逆序存储即可 *这种方法需要Ctrl+z结束输入读取,否则会一直处于读取输入状态,无法输出*/ int main() { string str1, str2; cin >> str2; while (cin >> str1) { str2 = str1 + " " + str2; } cout << str2 << endl; return 0; } #endif

    程序运行结果如下:


    最新回复(0)