gpt4 book ai didi

c++ - 字符串中奇数位和偶数位的数字之和

转载 作者:行者123 更新时间:2023-11-27 23:38:41 25 4
gpt4 key购买 nike

变量 sum_e 的输出为负数,这不是我期望的结果。

我只是将偶数和奇数位置的值相加,并将它们存储在两个变量中。我检查了解决方案并找到了从数字中提取数字的解决方案。他们都没有字符串输入。

#include<iostream>
using namespace std;

int main(){
string s;
cin>>s;
int sum_e=0,sum_o=0;

int l=s.length();

for(int i=0;i<=l;i=i+2){
sum_o+=(s[i]-'0');
}
for(int j=1;j<=l;j=j+2){
sum_e+=(s[j]-'0');
}
cout<<sum_o<<endl<<sum_e;
return 0;
}

我从字符串索引中减去 '0' 以将其转换为 int。其中一个变量显示正确的输出,另一个显示负值。

最佳答案

你的 for循环运行的时间比数组的长度长一倍,所以当i = l , s[i]将从内存中获取未定义/垃圾值。使用 i < lj < l而不是 i <= lj <= l ,因为 C++ 中的索引从零开始。

#include <iostream>
using namespace std;

int main(){
string s;
cin >> s;
int sum_e = 0, sum_o = 0;

int l = s.length();

for(int i = 0; i < l; i = i + 2){
sum_o += (s[i] - '0');
}
for(int j = 1; j < l; j = j + 2){
sum_e += (s[j] - '0');
}

cout << sum_o << endl << sum_e;

return 0;
}

要改进您的代码,请使用一个 for 循环而不是两个。

for(int i = 0; i < l; i++){
// Check if even (i%2 returns the remainder of i/2, so here i%2==1 means even)
if(i%2 == 1){
sum_e += (s[i] - '0');
}else{
sum_o += (s[i] - '0');
}
}

关于c++ - 字符串中奇数位和偶数位的数字之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com