帮忙看下,有哪些要改 当前RE

#include<bits/stdc++.h>
using namespace std;
string s;
int n,i,x;
int main(){
	cin>>n;
	while(n!=0){
		cin>>s;
		reverse(s.begin(),s.end());
		cout<<s<<" ";
		if(s[s.size()]==("!"||"."||"?")) n--;
	}
	return 0;
}

2 条评论

  • @ 2025-2-1 23:20:44
    1. 越界
      在表达式 s[s.size()] 中,s.size() 返回字符串的长度,而字符串的最后一个字符的下标应为 s.size()-1

    2. 逆天表达式
      表达式 ("!" || "." || "?") 并不能实现“如果等于 '!' 或者等于 '.' 或者等于 '?'”的功能。

      • 在 C++ 中,逻辑或运算符 (||) 用于布尔值之间的运算,而 "!" 是字符串常量(实际情况中应该使用字符常量 '!'),因此表达式 "!" || "." 会先将 "!" 转换为指针,并判断是否为非零指针(通常为真),从而整个表达式总为真。
      • 正确的做法是分开比较
        if (s[s.size()-1] == '!' || s[s.size()-1] == '.' || s[s.size()-1] == '?')
        

    目前就看出来这么多

  • C4 算法期末测试第3题

    • 1