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