关于字符串的插入有关问题,顺序串
关于字符串的插入问题,顺序串。
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 20
typedef char elemtype;
typedef struct{
elemtype str[MAXSIZE];
int len;
}SeqString;
//新建顺序字符串
SeqString *InitStr(SeqString *s){
s=(SeqString *)malloc(sizeof(SeqString));
s->len=NULL;
return s;
}
//判断是否建立成功
int Judge(SeqString *s){
if(s->len==NULL)
{
printf("顺序字符串建立成功.\n");
return 1;
}
else
return 0;
}
//输入字符串
SeqString *CreateStr(SeqString *s){
char ch;
printf("输入要输入的字符串(按回车键结束):");//为什么s2=CreateStr(s2);执行到这里就不行了,而 s=CreateStr(s);可以?
while((ch=getchar())!='\n')
{
s->str[s->len]=ch;
s->len++;
}
return s;
}
int StrInsert(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2);
s2=CreateStr(s2); //为什么执行到这里不行
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=pos-1;i<s->len;i++)
{
s->str[i+len]=s->str[i];
}
for(i=pos-1;i<pos+len-1;i++)
{
s->str[i]=s2->str[j];
j++;
}
s->len=s->len+len;
printf("插入子串后的字符串为");
for(i=0;i<s->len;i++)
printf("%c",s->str[i]);
printf("\n");
return 1;
}
int main(){
SeqString *s;
int pos,len;
s=InitStr(s);
Judge(s);
s=CreateStr(s); //这个函数可以。
printf("请输入要插入子串的位置pos:");
scanf("%d",&pos);
printf("请输入要插入子串的位置长度len:");
scanf("%d",&len);
StrInsert(s,pos,len);
}
------解决方案--------------------
老手可以设置断点跟踪调试,新手可以利用printf跟踪调试(printf里面别忘了加\n哦)
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 20
typedef char elemtype;
typedef struct{
elemtype str[MAXSIZE];
int len;
}SeqString;
//新建顺序字符串
SeqString *InitStr(SeqString *s){
s=(SeqString *)malloc(sizeof(SeqString));
s->len=NULL;
return s;
}
//判断是否建立成功
int Judge(SeqString *s){
if(s->len==NULL)
{
printf("顺序字符串建立成功.\n");
return 1;
}
else
return 0;
}
//输入字符串
SeqString *CreateStr(SeqString *s){
char ch;
printf("输入要输入的字符串(按回车键结束):");//为什么s2=CreateStr(s2);执行到这里就不行了,而 s=CreateStr(s);可以?
while((ch=getchar())!='\n')
{
s->str[s->len]=ch;
s->len++;
}
return s;
}
int StrInsert(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2);
s2=CreateStr(s2); //为什么执行到这里不行
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=pos-1;i<s->len;i++)
{
s->str[i+len]=s->str[i];
}
for(i=pos-1;i<pos+len-1;i++)
{
s->str[i]=s2->str[j];
j++;
}
s->len=s->len+len;
printf("插入子串后的字符串为");
for(i=0;i<s->len;i++)
printf("%c",s->str[i]);
printf("\n");
return 1;
}
int main(){
SeqString *s;
int pos,len;
s=InitStr(s);
Judge(s);
s=CreateStr(s); //这个函数可以。
printf("请输入要插入子串的位置pos:");
scanf("%d",&pos);
printf("请输入要插入子串的位置长度len:");
scanf("%d",&len);
StrInsert(s,pos,len);
}
------解决方案--------------------
老手可以设置断点跟踪调试,新手可以利用printf跟踪调试(printf里面别忘了加\n哦)