| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1079 人关注过本帖
标题:我用C语言写了一个顺序串基本功能代码,为啥有几个函数显示不合法?懂得指点 ...
取消只看楼主 加入收藏
中午的星星
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-6-29
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:0 
我用C语言写了一个顺序串基本功能代码,为啥有几个函数显示不合法?懂得指点下啊。
/*
本次实验为C版,用一维数组实现字符串的基本功能。
主要的功能的函数全部删除完毕,
希望学生自己能自己画出示意图,充分的理解工作原理,
注意这次串并不是索引结构,而是一般的一维数组,
所以数据移动是一个问题,
从这个角度,再次复习了线性表的基本操作的具体实现。
*/

//功能:顺序串的基本基本功能
#include <stdio.h>  
#include <conio.h>     
#include <windows.h>
#include <iomanip>
using namespace std;
#define maxsize 30//顺序串的总空间大小
enum returnInfo{success,fail,overflow,underflow,rangeError,empty};//定义返回信息清单
void initString();//初始化函数
returnInfo strCreate(); //创建串
returnInfo strInsert(int position,char newStr[],int str_Length); //插入
returnInfo strDelete(int beginPosition,int endPosition); //删除
returnInfo strModify(int beginPosition,int endPosition,char newStr[]); //修改
int strSearch(char newStr[]);  //查找
void strTraverse(); //遍历
int strLength();//求串长
typedef struct
{
    char *str;  //串
    int length; //长度
}String;         

void initString(String *string)
{
    string->str=(char *)malloc(maxsize);//申请数组空间
}

returnInfo strCreate(String *string)
{   
    int i=-1,ch;
    printf("请输入要创建的字符串(ctrl+z结束输入):\n");
    fflush(stdin);
    while((ch=getch())!=26)
    {
        putch(ch);
        i++;
        if(ch!=13)
            string->str[i]=char(ch);
        else i=i-1;
        fflush(stdin);//为了每次输入后可以立即显示所输入的字符,则先清除缓冲区
    }
    string->length=i+1;
    printf("\n");
    return success;
}
returnInfo strInsert(String *string,int position,char newStr[],int str_Length)  //当插入的字符串在原串末尾时,就相当于合并
{  
        int j;
    if(position>string->length+1||position<=0)
        return rangeError;
    if(str_Length+string->length>maxsize)
        return underflow;
    for(j=string->length-1;j>=position-1;j--)
        string->str[j+str_Length]=string->str[j];
    position=position-1;
    for(j=0;j<str_Length;position++,j++)
        string->str[position]=newStr[j];
    string->length=str_Length+string->length;
    return success;


}
returnInfo strDelete(String *string,int beginPosition,int endPosition)
{
    int i,j;
    if(string->length==0)
  return empty;
    if(beginPosition>string->length||endPosition>string->length||beginPosition<=0||endPosition<=0||beginPosition>endPosition)
      return rangeError;
 for(i=beginPosition,j=endPosition;j<string->length;j++,i++)
  string->str[i-1]=string->str[j];
 string->length=string->length-(endPosition-beginPosition+1);
 return success;



}
returnInfo strModify(String *string,int beginPosition,int endPosition,char newStr[])
{
    int i,j,k,str_Length,count,newLength,returnvalue,beginposition,endposition;
    char *newdata;
 count=endPosition-beginPosition+1;
 str_Length=strlen(newStr);
 if(string->length=0)
  return empty;
    if(beginPosition>string->length||endPosition>string->length||beginPosition<=0||endPosition<=0||beginPosition>endPosition)
      return rangeError;
 for(i=0,j=beginPosition-1;i<str_Length&&i<count;j++,i++)
  string->str[j]=newStr[i];
    if(str_Length>count)
 {
  newLength=str_Length-count;
  newdata=new char[newLength];
  for(i=count,k=0;i<str_Length;i++,k++)
   newdata[k]=newStr[i];
  returnvalue=strInsert(endPosition+1,newdata,newLength);
  if(returnvalue==overflow)
   return overflow;



}
int strSearch(String *string,char newStr[])
{
        int i=0,str_Length,position=0,count=0, Str[100];
    if(length=0)
        return -1;
    str_Length=strlen(newStr);
    for(;i<length&&count<StrLength;i++)
    {
        if(Str[i]==newStr[count])
        {
            position=1-str_Length+2;count++;continue;
        }
        else
        {
            if(position=1)
                i=i-count;
            count=0;
            position=0;
        }
   
    }



}
void strTraverse(String *string)
{
    int i,j;
    if(string->length>0)
    {        
        printf("位置:   ");
        for(i=0;i<=(string->length)/10;i++)
            printf("|---%d----|",i);           
        printf("\n");
        printf("位置:   ");
        for(i=0;i<=(string->length)/10;i++)
        {
            for(j=0;j<=9;j++)
            printf("%d",j);
        }
        printf("\n");
        printf("当前串:  ");
        for(i=0;i<string->length;i++)
            printf("%c",string->str[i]);        
        printf("\n");
    }
    else
        printf("字符串为空!\n");   
}
int strLength(String *string)
{
    return string->length;
}
void menu(void)
{
    printf("顺序串基本功能菜单\n");
    printf("==========\n");
    printf("1.建立顺序串(仅限单行的字符串,建议不用汉字。)\n");
    printf("2.显示串\n");
    printf("3.修改串\n");
    printf("4.插入串\n");
    printf("5.删除串\n");
    printf("6.查找串\n");
    printf("7.求串长度\n");
    printf("8.结束程序\n");
    printf("==========\n");
}
int main()   
{
    system("color f0");
    int flag=0,returnValue,position,beginPosition,endPosition,length;
    char choice,choose,newStr[maxsize];
    String newString;
    initString(&newString);
    menu();
    while(1)
    {
        printf("请输入选择:");
        fflush(stdin);
        scanf("%c",&choice);
        switch(choice)
        {
            case '1':
                if(flag)
                 {
                    printf("数据已存在,是否覆盖?(y/n)");
                    fflush(stdin);
                    scanf("%c",&choose);
                    if(choose=='N'||choose=='n')
                    {
                        printf("数据没有发生更改!\n");
                        break;
                    }
                    if(choose=='Y'||choose=='y')
                    {
                        returnValue=strCreate(&newString);
                        if(returnValue==success)
                        printf("创建成功!\n");
                        flag=1;
                    }
                    else
                        printf("输入错误!\n");
                 }
                 else
                 {
                     returnValue=strCreate(&newString);
                     if(returnValue==success)
                         printf("创建成功!\n");
                     flag=1;
                 }
                 break;

            case '2':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                    strTraverse(&newString);                        
                break;
               
            case '3':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                {
                    strTraverse(&newString);
                    printf("请输入要修改的初始位置:");
                    fflush(stdin);
                    scanf("%d",&beginPosition);
                    printf("请输入要修改的终止位置:");
                    fflush(stdin);
                    scanf("%d",&endPosition);
                    printf("请输入修改后的字符串:");
                    fflush(stdin);
                    scanf("%s",newStr);
                    returnValue=strModify(&newString,beginPosition,endPosition,newStr);
                    if(returnValue==success)
                    {
                        printf("修改成功!\n");
                        strTraverse(&newString);
                    }
                    if(returnValue==overflow)
                    {   
                        printf("字符串的最大长度为%d\n",maxsize);
                        printf("发生溢出,操作失败!\n");
                    }
                    if(returnValue==rangeError)
                        printf("位置错误,操作失败!\n");
                    if(returnValue==empty)
                        printf("字符串为空,操作失败!\n");
                }
                break;
                     
            case '4':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                {
                    strTraverse(&newString);
                    printf("请输入要插入的位置:");
                    fflush(stdin);
                    scanf("%d",&position);
                    printf("请输入要插入的字符串:");
                    fflush(stdin);
                    scanf("%s",newStr);
                    length=strlen(newStr);
                    returnValue=strInsert(&newString,position,newStr,length);
                    if(returnValue==success)
                    {
                        printf("插入成功!\n");
                        strTraverse(&newString);
                    }
                    if(returnValue==overflow)
                    {   
                        printf("字符串的最大长度为%d\n",maxsize);
                        printf("发生溢出,操作失败!\n");
                    }
                    if(returnValue==rangeError)
                        printf("位置错误,操作失败!\n");
                    }
                    break;
                     
            case '5':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                {
                    strTraverse(&newString);
                    printf("请输入要删除的初始位置:");
                    fflush(stdin);
                    scanf("%d",&beginPosition);
                    printf("请输入要删除的终止位置:");
                    fflush(stdin);
                    scanf("%d",&endPosition);
                    returnValue=strDelete(&newString,beginPosition,endPosition);
                    if(returnValue==success)
                    {
                        printf("删除成功!\n");
                        strTraverse(&newString);
                    }
                    if(returnValue==rangeError)
                        printf("位置错误,操作失败!\n");
                    if(returnValue==empty)
                        printf("字符串为空,操作失败!\n");
                }                        
                break;
                        
            case '6':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                {
                    strTraverse(&newString);
                    printf("请输入要查找的字符串:");
                     fflush(stdin);
                    scanf("%s",&newStr);
                    position=strSearch(&newString,newStr);
                    if(position>0)
                    {
                        printf("已找到!\n");
                        printf("字符串出现的初始位置为:%d\n",position);
                    }
                    if(position==0)
                        printf("您要查找的字符串不存在!\n");
                    if(position==-1)
                        printf("字符串为空,操作失败!\n");
                }                        
                break;
                     
            case '7':

                if(flag==0)
                    printf("请先建立串!\n");
                else
                {
                    strTraverse(&newString);
                    length=strLength(&newString);
                    printf("当前串的长度为:%d\n",length);
                }
                break;
                     
            case '8':

                exit(0);
                break;

            default:
                printf("输入错误!\n");break;
        }
        printf("按任意键继续......\n");
        getch();
        system("cls");
        menu();
    }
    getch();
    return 0;
}
搜索更多相关主题的帖子: include success 工作原理 C语言 示意图 
2016-10-27 22:09
快速回复:我用C语言写了一个顺序串基本功能代码,为啥有几个函数显示不合法?懂 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026298 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved