60分代码,求助大佬错的都是WA了

P1957 口算练习题

chenmumin @ 2023-07-22 13:14:47

#include<bits/stdc++.h>
using namespace std;
int main(){
    char l[2],s[105];
    int n,b,c;
    char a;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>l;
        if(l[0]>='a'&&l[0]<='z'){
            a=l[0];
            cin>>b>>c;
        }else{
            sscanf(l,"%d",&b);
            cin>>c;
        }
        memset(s,0,sizeof(s));
        if(a=='a'){
            sprintf(s,"%d+%d=%d",b,c,b+c);
        }else if(a=='b'){
            sprintf(s,"%d-%d=%d",b,c,b-c);
        }else if(a=='c'){
            sprintf(s,"%d*%d=%d",b,c,b*c);
        }
        cout<<s<<endl<<strlen(s)<<endl;
    }
}

by Saint_yu @ 2023-07-22 13:29:32

#include <bits/stdc++.h>
using namespace std;

int main() {
    char l[2], s[105];
    int n, b, c;
    char a;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> l;
        if (l[0] >= 'a' && l[0] <= 'z') {
            a = l[0];
            cin >> b >> c;
        } else {
            sscanf(l, "%d", &b);
            cin >> c;
        }
        memset(s, 0, sizeof(s));
        int len = 0;  // 保存字符串长度
        if (a == 'a') {
            len = sprintf(s, "%d+%d=%d", b, c, b + c);
        } else if (a == 'b') {
            len = sprintf(s, "%d-%d=%d", b, c, b - c);
        } else if (a == 'c') {
            len = sprintf(s, "%d*%d=%d", b, c, b * c);
        }
        cout << s << endl << len << endl;
    }
    return 0;
}

使用len保存长度,而不是使用strlen函数。strlen()只能计算以 null 终止的字符串的长度。


by chenmumin @ 2023-07-22 13:42:23

@3wykx 谢谢大佬 AC了


by chenmumin @ 2023-07-22 13:43:57

@3wykx 还有什么是null 终止的字符串的长度啊?


by Saint_yu @ 2023-07-22 15:17:07

strlen 函数通过逐个检查字符串中的字符,直到遇到字符串的结尾标记 ('\0' 或者 NULL) 来确定字符串的长度。也就是必须遇到终止标记。你可以把NULL理解为空,严格来说是指向0的指针。如果想要使用strlen函数并保证安全的话,可以在末尾添加一个“\0”(如果没有),而不是添加NULL


|