【发布时间】:2019-12-05 08:51:54
【问题描述】:
在调试这段代码时,我注意到代码中提到的 sum 值往往会给出错误的结果。我不明白为什么会这样。
我的程序用一个字符串计算它的子串并计算所有子串中元音的数量,最后的总和值是同时所有元音计数的总和
我已经尝试通过代码进行调试,但无法理解代码有什么问题
#include <iostream>
using namespace std;
int main()
{
long long int t,j,n,l,count=0,sum=0;
cin>>t;
string s;
//char i;
while(t>0)
{
l=0;
sum=0;
count=0;
cin >> s;
n= s.length();
for(j=0;j<n;j++)
{
if(s[j]=='a' || s[j]=='e' || s[j]=='i' || s[j]=='o' || s[j]=='u' || s[j]=='A'|| s[j]=='E' || s[j]=='I' ||s[j]=='O' || s[j]=='U')
{
count++;
l=j;
cout<<"l="<<j<<endl;
cout<<"j="<<j<<endl;
cout<<"n="<<n<<endl;
cout<<"n-1="<<n-1<<endl;
cout<<"j+1="<<j+1<<endl;
sum=sum+((n-l)*(j+1));
cout<<"SUM is="<<sum << endl;
}
}
if(l==0)
{
sum=0;
}
cout<<"Second part Sum="<<endl;
cout<<sum<<endl;
t--;
}
}
程序编译并运行,没有错误消息。但是,由于 sum 的计算不正确,存在逻辑错误...
为什么 sum = 20 ?,应该是 25 或 35...
为了澄清,这是此解决方案的问题陈述: https://www.hackerearth.com/practice/basic-programming/complexity-analysis/time-and-space-complexity/practice-problems/algorithm/vowel-game-f1a1047c/
【问题讨论】:
-
你的程序到底应该做什么?
-
@ManLaw 我的程序接受一个字符串,计算它的子字符串并计算所有子字符串中存在的元音数量,最后一个总和值是同时所有元音计数的总和,它工作正常但我对 sum value 的计算有疑问,应该是 25 或 35 而不是 20
-
请edit在您的问题中解释这一点。
-
可能是因为您将 sum 设置为 0 jndide 您的循环
while (t > 0)?还是if (l == 0)位?更一般地说,如果您在变量名称上投入更多精力(即更多字母,例如 inStr 而不是 s,我不知道 t 或 l 是什么意思)并正确缩进,可能更容易理解。
标签: string c++11 char substring findbugs