c++ 为什么第二个string无法读取?

P1055 [NOIP2008 普及组] ISBN 号码

diva233 @ 2023-07-17 13:20:56

如题

大佬救我

我的想法是先用一个数组“a”存储带有分隔符的ISBN码

#include <bits/stdc++.h>
using namespace std;
int main(){
    string a,b;
    int test_1=1,sum=0;
    cin >>a;

再把不带有分隔符的数组转存到数组“b“中

for(int i=1;i<=a.size();i++){
        if(a[i]!='-'){
            b[test_1]=a[i];
            test_1++;
        }
    }

然后用一个变量“sum”存储各位上的和

for(int i=1;i<b.size();i++){
        sum+=b[i]*i;
    }

最后检验输出

if(sum%11==a[a.size()]){
        cout <<"Right";
    }
    else if(sum%11==10&&a[a.size()]=='X'){
        cout <<"Right";
    }
    else{
        cout <<a<<sum%11;
    }
   return 0;
}

但是不知道为什么第二步时string b存储不进来???

大佬救我


by diva233 @ 2023-07-17 13:21:47

完整代码

#include <bits/stdc++.h>
using namespace std;
int main(){
    string a,b;
    int test_1=1,sum=0;
    cin >>a;
    for(int i=1;i<=a.size();i++){
        if(a[i]!='-'){
            b[test_1]=a[i];
            test_1++;
        }
    }
    for(int i=1;i<b.size();i++){
        sum+=b[i]*i;
    }
    if(sum%11==a[a.size()]){
        cout <<"Right";
    }
    else if(sum%11==10&&a[a.size()]=='X'){
        cout <<"Right";
    }
    else{
        cout <<a<<sum%11;
    }
    return 0;
}

by InversionShadow @ 2023-07-17 13:26:08

字符串下标从 0 开始


by Kedit2007 @ 2023-07-17 13:40:33

可随机访问的容器(vector, string等)的下标从 0 开始。顺便,如果需要访问最后一个元素,可以直接使用 s.back() ,其中 s 是一个 vector, string 等。


|