字符串逆序

GitHub跳转原题关系图返回列表

读取以 '!' 结尾的字符串,把 '!' 之前的部分逆序输出。

OJ: roj

题目 ID: 1162

难度:入门

标签:字符串入门字符串反转

创建: 2026-09-29 21:25

更新: 2026-10-05 03:57

题目描述

输入一串以 '!' 结尾的字符序列,把 '!' 之前的部分按逆序输出。输入一行字符(以 '!' 结尾);样例输入 abc! 对应样例输出 cba。

思路

把整行读到字符数组里,定位终止符 '!',从后往前逐个输出它前面的字符即可。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 21:25
# update_at: 2026-09-29 21:25

import sys


def solve() -> None:
    """读取以 '!' 结尾的一行,输出 '!' 之前所有字符的逆序。"""
    text = sys.stdin.buffer.read().decode().rstrip('\n')
    end = text.find('!')                                # 找到终止符位置
    print(text[:end][::-1])


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 03:57
 * update_at: 2026-10-05 03:57
 */

// main.cpp:读取以 '!' 结尾的一行字符串,输出 '!' 之前字符的逆序。
// 思路:把整行读到字符数组里,找到 '!' 的位置(或者读到末尾),把前面那段逆序输出。

#include <cstdio>

const int MAXN = 1005;       // 输入长度上限,远超题目实际规模

char buf[MAXN];              // 读入缓冲区

int main() {
    // 用 fgets 读一整行,保留换行符;后面再处理
    if (fgets(buf, sizeof(buf), stdin) == 0) return 0;

    int n = 0;               // '!' 之前的有效字符数
    for (int i = 0; buf[i] != '\0' && buf[i] != '!'; ++i) {
        ++n;
    }

    // 从后往前输出 '!' 之前的 n 个字符
    for (int i = n - 1; i >= 0; --i) {
        putchar(buf[i]);
    }
    putchar('\n');
    return 0;
}