以下 C++ 代码有什么问题?
What is the problem with the following c++ code?
问题是 12289 - 来自在线法官的一二三 https://onlinejudge.org/external/122/12289.pdf 我必须将给定的字符串 s 与以下内容进行比较:"一"、"二"、"三",并返回一个数字,指示其中哪个字符串在字符串的正确位置具有最正确的字符。 以下是我试图得到一个被接受的答案。
#include <cstdio>
using namespace std;
int main(){
char c;
int t,len,c1,c2;
scanf("%dn",&t);
while(t--){
len = 0;
c1 = 0;
c2 = 0;
while(true){
scanf("%c",&c);
if(c=='n') break;
if("one"[len] == c) c1++;
if("two"[len] == c) c2++;
len++;
}
if(len>3) printf("%dn",3);
else if (c1>c2) printf("%dn",1);
else printf("%dn",2);
}
printf("n");
}
我在这个问题中得到了一个"错误的答案",这通常不涉及格式问题。我是C++新手,所以了解我可以改进的地方对我有很大帮助。
正如托马斯所说,你应该检查 len 是否> 3。字符串基本上是以空字节或"\0"结尾的字符数组。在内存中,这表示为 ['o', 'n', 'e', '\0', ?, ...] 其中 ?是垃圾值,或者 C/C++ 称之为非法内存访问。因此,"一"[4] == c 或"二"[4] == c 有可能为真,因为我们不知道存储在那里的值。如果发生这种情况,那么该行
else if (c1>c2) printf("%dn",1);
会有问题。
感谢您的支持。我发现真正的问题是输入的格式。两个连续输入之间有空行,因此if(c=='n') break;
部分造成了一些麻烦。 无论如何,我将尝试按照C++指南重新制定解决方案。我只是不知道如何处理字符串,所以我想逐个字符地做。我正在关闭线程。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- c++无值sort()的问题是什么?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 什么是钻石问题?是一系列问题还是特定问题?
- 格式说明符C++有什么问题
- 我应该在 main 函数中写什么来测试我的问题?
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 方法问题 - 什么会改变值,什么不会改变?什么是无效的?