C++ 我的UVa代码有什么问题
我试图用UVa解决这个问题,但我得到了一个错误的答案,我似乎找不到错误C++ 我的UVa代码有什么问题,c++,C++,我试图用UVa解决这个问题,但我得到了一个错误的答案,我似乎找不到错误 #包括 #包括 使用名称空间std; int main() { int t,j,k,i=1; 字符a[1000]; while(scanf(“%d”、&t)!=EOF&t) { 整数和=0; getchar(); 获得(a); k=strlen(a); 对于(j=0;j 将您的代码划分为执行特定操作的函数:从文件中读取数据,计算每个输入的按键次数,输出结果 好处: 您可以独立地测试每个函数。对代码进行推理也更容易 输入的最
#包括
#包括
使用名称空间std;
int main()
{
int t,j,k,i=1;
字符a[1000];
while(scanf(“%d”、&t)!=EOF&t)
{
整数和=0;
getchar();
获得(a);
k=strlen(a);
对于(j=0;j
将您的代码划分为执行特定操作的函数:从文件中读取数据,计算每个输入的按键次数,输出结果
好处:
您可以独立地测试每个函数。对代码进行推理也更容易
输入的最大大小为100,这意味着每个输入只需要101个字符的数组(包括最后的\0
),而不是1000个字符
由于这个问题也被标记为C++
请尝试在代码中使用std::vector
和std::string
粗略地看一下
的内部。拥有一个计算按键次数的专门功能的好处是,您可以轻松地验证它是否正确。请确保彻底检查它
在问题描述中,有一个数字表示以后将输入的文本数。您的原始代码试图在每行输入之前读取该数字
尝试读取每行中的数字将失败,因为输入字符集不包含任何数字,因此您可能倾向于认为应该没有差异。但是,当您尝试读取数字时,它将首先使用前导空格。如果输入为:
a
输出应为3(两个“0”键和一个“2”键),但尝试从行外读取数字将使用两个前导空白字符,后面的get
将读取字符串“a”
,而不是“a”
。您的计数将被前导空格的数量所抵消。while
循环似乎不正确,是吗?是否要在每次迭代中读取t
?是的,t表示案例数显示多次案例数是否显示在您的输入中?是否要在每次迭代中读取t
-dribeas案例数在输入开始时出现一次。将工作负载划分为:读取T和T行(工作负载)每一行的处理,输出每一行的结果,应该让他考虑所有这些问题,并希望导致更好的代码……是的@ DavidRodr Guez DeBeasasAdter我使用了101个字符,但我仍然得到同样的错误答案。@ SaveDoc,你得到错误答案的事实与101个字符几乎没有。删除所有的代码和ST。再次开始,根据我的答案编写专用函数。独立测试每个函数。如果有任何新问题,请返回。@swapedoc对于初学者,“第一行输入将是正整数T,其中T表示测试用例的数量。然后,T行将跟随”从问题描述中,我建议使用一个文件作为输入。我也没有看到删除所有代码并重新开始的提示,根据我的回答请求编写专用函数。这次我计算了每种情况下的总和值,发现编译器没有读取字符串的第一个字符,这是为什么@Andrei@swapedoc你的变化不相关…问题指出“输入的第一行将是一个正整数T,其中T表示测试用例的数量。然后,T行将紧跟在每一行之后,仅包含空格和小写字母。每一行将包含至少1个字符,最多100个字符。”由于代码使用<代码>命名空间STD< /C> >这是明显的C++。请编写一个函数,生成/填充一个<代码> STD::vector < /COD>包含您需要处理的测试用例。
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int t,j,k,i=1;
char a[1000];
while(scanf("%d",&t)!=EOF && t)
{
int sum=0;
getchar();
gets(a);
k=strlen(a);
for(j=0;j<k;j++)
{ if(a[j]=='a'||a[j]=='d'||a[j]=='g'||a[j]=='j'||a[j]=='m'||a[j]=='p'||a[j]=='t'||a[j]=='w'||a[j]==32)
sum=sum+1;
else if(a[j]=='b'||a[j]=='e'||a[j]=='h'||a[j]=='k'||a[j]=='n'||a[j]=='q'||a[j]=='u'||a[j]=='x')
sum=sum+2;
else if(a[j]=='c'||a[j]=='f'||a[j]=='i'||a[j]=='l'||a[j]=='o'||a[j]=='r'||a[j]=='v'||a[j]=='y')
sum=sum+3;
else if(a[j]=='s'||a[j]=='z')
sum=sum+4;
}
printf("Case #%d: %d\n",i,sum);
i++;
}
return 0;
}