【发布时间】:2020-03-30 07:23:48
【问题描述】:
当我将大小为 1 的字符串作为输入传递时,我遇到了分段错误(核心转储)。我试图寻找原因,但我找不到任何原因,我被要求调试我的程序。通过调试,我意识到它在读取大小为 1 的字符串时会引发分段错误。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll t,x,y;
string s;
cin>>t;
while(t--){
cin>>s;
int tilt=0;
for(int i=s.length()-1,j=0;i>=s.length()/2;i--,j++){
if(s[i]!=s[j]){
tilt = s[i]>s[j]?-1:1;
s[i]=s[j];
}
}
if(tilt==-1 || tilt==0){
if(s.length()%2==0){
y=1;x=s.length()/2-1;
while(y!=0 && x>=0){
if(s[x]=='9'){
s[x]='0';
}else{
s[x] += 1;
y=0;
}
x--;
}
if(y==0){
for(int i=0;i<s.length()/2;i++){
cout<<s[i];
}
for(int i=s.length()/2-1;i>=0;i--){
cout<<s[i];
}
cout<<endl;
}else{
cout<<1;
for(int i=0;i<s.length()/2;i++){
cout<<s[i];
}
for(int i=s.length()/2-2;i>=0;i--){
cout<<s[i];
}
cout<<1<<endl;
}
}else{
y=1;x=s.length()/2;
while(y!=0 && x>=0){
if(s[x]=='9'){
s[x]='0';
}else{
s[x] += 1;
y=0;
}
x--;
}
if(y==0){
for(int i=0;i<s.length()/2;i++){
cout<<s[i];
}
for(int i=s.length()/2;i>=0;i--){
cout<<s[i];
}
cout<<endl;
}else{
cout<<1;
for(int i=0;i<s.length()/2;i++){
cout<<s[i];
}
for(int i=s.length()/2-1;i>=0;i--){
cout<<s[i];
}
cout<<1<<endl;
}
}
}else{
cout<<s<<endl;
}
}
return 0;
}
输入: 1 11 输出: 22
输入: 1 1 输出: 错误
【问题讨论】:
标签: c++ segmentation-fault palindrome