读取以 '!' 结尾的字符串,把 '!' 之前的部分逆序输出。
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;
}