Cpp 中的“1”和“1”是否不同?如果是那么怎么办?
Are "1" and '1' different in Cpp ? if yes then how?
当字符数组的元素与“1”而不是“1”进行比较时,它显示错误
#include <bits/stdc++.h>
using namespace std;
bool sortbysec(const pair<int,int> &a,
const pair<int,int> &b)
{
return (a.second > b.second);
}
int main() {
int t;
cin>>t;
while(t--)
{
int N,K;
cin>>N>>K;
char s[N];
vector<pair<int,int>> zero;
int j;
cin>>s;
if(s[0]=='0') j=0; // No error when I use '0' instead of "0"
for(int i=1;i<N;i++)
{
if(s[i]=="1"&&s[i-1]=="0") zero.push_back(make_pair(j,i-j)); // [Error] ISO C++ forbids comparison between pointer and integer [-fpermissive]
else if(s[i]=="0"&&s[i-1]=="1") j=i;
}
if(s[N-1]=="0") zero.push_back(make_pair(0,N-j));
sort(zero.begin(),zero.end(),sortbysec);
for(auto i=zero.begin();i!=zero.end();i++)
{
cout<<i->first<<" "<<i->second<<endl;
if(K==0) break;
if(i->first==0)
{
K--;
zero.erase(i);
}
else
{
if(K>=2)
{
K-=2;
zero.erase(i);
}
}
}
int res=0;
for(auto i=zero.begin();i!=zero.end();i++)
{
res+=i->second;
}
cout<<res<<endl;
}
return 0;
}
[错误] ISO C++ 禁止比较指针和整数 [-fpermissive]
根据错误,其中一个是指针,另一个是整数,如果是这样,那么它们中的哪一个是什么以及如何?
Are "1" and '1' different in Cpp ?
是的。
if yes then how?
第一个是空终止字符数组,第二个是字符。
According to error one of them is pointer and other is integer if so then which of them is what and how?
从技术上讲,其中一个操作数是我提到的数组。但是当数组用作右值时,它会隐式转换为指向第一个元素的指针。所以,"1"
就是转换后的指针。 s[0]
是字符。
当字符数组的元素与“1”而不是“1”进行比较时,它显示错误
#include <bits/stdc++.h>
using namespace std;
bool sortbysec(const pair<int,int> &a,
const pair<int,int> &b)
{
return (a.second > b.second);
}
int main() {
int t;
cin>>t;
while(t--)
{
int N,K;
cin>>N>>K;
char s[N];
vector<pair<int,int>> zero;
int j;
cin>>s;
if(s[0]=='0') j=0; // No error when I use '0' instead of "0"
for(int i=1;i<N;i++)
{
if(s[i]=="1"&&s[i-1]=="0") zero.push_back(make_pair(j,i-j)); // [Error] ISO C++ forbids comparison between pointer and integer [-fpermissive]
else if(s[i]=="0"&&s[i-1]=="1") j=i;
}
if(s[N-1]=="0") zero.push_back(make_pair(0,N-j));
sort(zero.begin(),zero.end(),sortbysec);
for(auto i=zero.begin();i!=zero.end();i++)
{
cout<<i->first<<" "<<i->second<<endl;
if(K==0) break;
if(i->first==0)
{
K--;
zero.erase(i);
}
else
{
if(K>=2)
{
K-=2;
zero.erase(i);
}
}
}
int res=0;
for(auto i=zero.begin();i!=zero.end();i++)
{
res+=i->second;
}
cout<<res<<endl;
}
return 0;
}
[错误] ISO C++ 禁止比较指针和整数 [-fpermissive] 根据错误,其中一个是指针,另一个是整数,如果是这样,那么它们中的哪一个是什么以及如何?
Are "1" and '1' different in Cpp ?
是的。
if yes then how?
第一个是空终止字符数组,第二个是字符。
According to error one of them is pointer and other is integer if so then which of them is what and how?
从技术上讲,其中一个操作数是我提到的数组。但是当数组用作右值时,它会隐式转换为指向第一个元素的指针。所以,"1"
就是转换后的指针。 s[0]
是字符。