c语言编程!展开缩写字符串,初学者求改错!

2024-11-07 10:43:38
推荐回答(5个)
回答(1):

你的s1字符串在修改之后将原来输入时系统自己加上的字符串结束符'\0'替换掉了,这样s1就变成字符数组了,复厅竖制之后s2也是字符数组,用输出字符串的格式输出,由返激于没有字符串结束符,所以会在最后输出乱码,可以人为加一个字符串结扮世大束符给s1,这样就没问题了

#include
#include
#include "string.h"
int main(int argc, char *argv[])
{ char s1[100],s2[100];
int i,j,n,len,k=0;//k用于计算s1总长度
gets(s1);
gets(s2);
len=strlen(s1);
k=len;
for(i=0;s1[i]!='\0';i++)
{
if(s1[i]=='-'&&s1[i-1] {
n=s1[i+1]-s1[i-1];
for(j=len-1;j>=i+1;j--)
s1[j+n-2]=s1[j];
for(j=0;j s1[i+j]=s1[i-1]+j+1;
k+=n;
}
}
s1[k-2]='\0';
strcpy(s2,s1);
puts(s2);
system("PAUSE");
return 0;
}

回答(2):

s1没有终结

#include
#include
#include "string.h"
int main(int argc, char *argv[])
{ char s1[100],s2[100];
int i,j,n,len;
gets(s1);
gets(s2); /*这漏备个没神马意思吧*/
len=strlen(s1);
for(i=0;s1[i]!='消旁\拿搜橡0';i++)
{if(s1[i]=='-'&&s1[i-1] { n=s1[i+1]-s1[i-1];
for(j=len-1,s1[j+n-1]=0;/*终结字符串*/j>=i+1;j--)
s1[j+n-2]=s1[j];
for(j=0;j s1[i+j]=s1[i-1]+j+1;}}
strcpy(s2,s1);
puts(s2);
system("PAUSE");
return 0;
}

回答(3):

/*
s1 = asd-fge-ak1-5sj
s2 = abc
asdefge-ak12345sj
请按任意返旅键漏伍凳继续. . .
*/
#include
#include
#include

int main(int argc, char *argv[]) {
char s1[100],s2[100],ch;
int i,j,n,m,len;
printf("s1 = ");
gets(s1);
printf("s2 = ");
gets(s2);
len = strlen(s1);
for(i = 0,m = 0 ;s1[i];i++) {
s2[m] = s1[i];
if(s1[i] == '橘陵-' && s1[i - 1] < s1[i + 1]) {
for(ch = s1[i - 1] + 1; ch < s1[i + 1]; ++ch)
s2[m++] = ch;
}
else m++;
}
s2[m] = '\0';
puts(s2);
return 0;
}

回答(4):

#include
#include <旁纯盯stdlib.h>
#include "string.h"
int main(int argc, char *argv[])
{ char s1[100],s2[100];
int i,j,n,len;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
gets(s1);
gets(s2);
len=strlen(s1);
for(i=0;s1[i]!='运和\0';i++)
{if(s1[i]=='-'&&s1[i-1] { n=s1[i+1]-s1[i-1];
for(j=len-1;j>裤凯=i+1;j--)
s1[j+n-2]=s1[j];
for(j=0;j s1[i+j]=s1[i-1]+j+1;}}
strcpy(s2,s1);
puts(s2);
system("PAUSE");
return 0;
}

回答(5):

是因为您的解码器不匹配或容量小,或格式不对