关于C语言字符串有关问题。代码挺长但只有一个函数里面的有关问题,麻烦看下,感激不尽
关于C语言字符串问题。代码挺长但只有一个函数里面的问题,麻烦看下,感激不尽!
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 30
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("输入要输入的字符串(按回车键结束):");
while((ch=getchar())!='\n')
{
s->str[s->len]=ch;
s->len++;
}
s->str[s->len]='\0'; //最后一个赋值为'\0'表示结束。(这个很重要)
return s;
}
//求子串
int SubStr(SeqString *s,int pos,int len){
int i;
SeqString *s2;
s2=InitStr(s2);
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=0;i<len;i++)
{
s2->str[i]=s->str[pos+i-1]; //第pos+i位的值给s2->str[i];长度+1.
s2->len++;
}
printf("所求字串为%s\n",s2->str);
return 1;
}
//插入子串
int StrInsert(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2); 问题在这里。。。。。。。。。。。。。
s2=CreateStr(s2); //为什么这里只能执行到printf("输入要输入的字符串(按回车键结束):");不能再输入字符串?
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=s->len;i<pos;i--)
{
s->str[i+len]=s->str[i];
}
for(i=pos-1;i<pos+len;i++)
{
s->str[i]=s2->str[j];
j++;
}
s->len=s->len+len;
s->str[s->len]='\0';
printf("插入子串后的字符串为");
printf("%s\n",s->str);
return 1;
}
//串置换
int StrReplace(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2); 问题在这里。。。。。。。。。。。。。
s2=CreateStr(s2); //为什么这里只能执行到printf("输入要输入的字符串(按回车键结束):");不能再输入字符串?
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度的错误!\n");
return 0;
}
for(i=pos-1;i<pos+len;i++)
{
s->str[i]=s2->str[j];
j++;
}
printf("串置换之后的字符串为%s\n",s->str);
return 1;
}
//删除子串
int StrDelete(SeqString *s,int pos,int len){
int i,j=0;
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 30
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("输入要输入的字符串(按回车键结束):");
while((ch=getchar())!='\n')
{
s->str[s->len]=ch;
s->len++;
}
s->str[s->len]='\0'; //最后一个赋值为'\0'表示结束。(这个很重要)
return s;
}
//求子串
int SubStr(SeqString *s,int pos,int len){
int i;
SeqString *s2;
s2=InitStr(s2);
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=0;i<len;i++)
{
s2->str[i]=s->str[pos+i-1]; //第pos+i位的值给s2->str[i];长度+1.
s2->len++;
}
printf("所求字串为%s\n",s2->str);
return 1;
}
//插入子串
int StrInsert(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2); 问题在这里。。。。。。。。。。。。。
s2=CreateStr(s2); //为什么这里只能执行到printf("输入要输入的字符串(按回车键结束):");不能再输入字符串?
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度错误!\n");
return 0;
}
for(i=s->len;i<pos;i--)
{
s->str[i+len]=s->str[i];
}
for(i=pos-1;i<pos+len;i++)
{
s->str[i]=s2->str[j];
j++;
}
s->len=s->len+len;
s->str[s->len]='\0';
printf("插入子串后的字符串为");
printf("%s\n",s->str);
return 1;
}
//串置换
int StrReplace(SeqString *s,int pos,int len){
int i,j=0;
SeqString *s2;
s2=InitStr(s2); 问题在这里。。。。。。。。。。。。。
s2=CreateStr(s2); //为什么这里只能执行到printf("输入要输入的字符串(按回车键结束):");不能再输入字符串?
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)
{
printf("位置或者长度的错误!\n");
return 0;
}
for(i=pos-1;i<pos+len;i++)
{
s->str[i]=s2->str[j];
j++;
}
printf("串置换之后的字符串为%s\n",s->str);
return 1;
}
//删除子串
int StrDelete(SeqString *s,int pos,int len){
int i,j=0;
if(pos<1||pos>=s->len||len<0||len>s->len-pos+1)