| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
在写串的cpp中出现这种问题,其中红色部分报错,显示const char 与char不兼容,我尝试在前面加上(char*)强制转化,接下来编译无报错,但调试出现重定义报错,代码如下 
sqstring.cpp中源程序代码: 
#include <stdio.h> 
#define MaxSize 100 
typedef struct 
{        char data[MaxSize]; 
        int length; 
} SqString; 
void StrAssign(SqString &s,char cstr[])//将字符串常量赋给串s 
{        int i; 
        for(i=0; cstr[i]!='\0'; i++) 
                s.data[i]=cstr[i]; 
        s.length=i; 
} 
void DestroyStr(SqString &s)//销毁串 
{} 
void StrCopy(SqString &s,SqString t)//串复制 
{        for(int i=0; i<t.length; i++) 
                s.data[i]=t.data[i]; 
        s.length=t.length; 
} 
bool StrEqual(SqString s,SqString t)//判串相等 
{        bool same=true; 
        if(s.length!=t.length) 
                same=false; 
        else 
                for(int i=0; i<s.length; i++) 
                        if(s.data[i]!=t.data[i]) 
                        {        same=false; 
                                break; 
                        } 
        return same; 
} 
int StrLength(SqString s)//求串长 
{        return s.length; 
} 
SqString Concat(SqString s,SqString t)//串连接 
{        SqString str; 
        int i; 
        str.length=s.length+t.length; 
        for(i=0; i<s.length; i++) 
                str.data[i]=s.data[i]; 
        for(i=0; i<t.length; i++) 
                str.data[s.length+i]=t.data[i]; 
        return str; 
} 
SqString SubStr(SqString s,int i,int j)//求子串 
{        SqString str; 
        int k; 
        str.length=0; 
        if(i<=0||i>s.length||j<0||i+j-1>s.length) 
                return str; 
        for(k=i-1; k<i+j-1; k++) 
                str.data[k-i+1]=s.data[k]; 
        str.length=j; 
        return str; 
} 
SqString InsStr(SqString s1,int i,SqString s2)//插入子串 
{        int j; 
        SqString str; 
        str.length=0; 
        if(i<=0||i>s1.length+1) 
                return str; 
        for(j=0; j<i-1; j++) 
                str.data[j]=s1.data[j]; 
        for(j=0; j<s2.length; j++) 
                str.data[i+j-1]=s2.data[j]; 
        for(j=i-1; j<s1.length; j++) 
                str.data[s2.length+j]=s1.data[j]; 
        str.length=s1.length+s2.length; 
        return str; 
} 
SqString DelStr(SqString s,int i,int j)//删除子串 
{        int k; 
        SqString str; 
        str.length=0; 
        if(i<=0||i>s.length||i+j>s.length+1) 
                return str; 
        for(k=0; k<i-1; k++) 
                str.data[k]=s.data[k]; 
        for(k=i+j-1; k<s.length; k++) 
                str.data[k-j]=s.data[k]; 
        str.length=s.length-j; 
        return str; 
} 
SqString RepStr(SqString s,int i,int j,SqString t)//替换子串 
{        int k; 
        SqString str; 
        str.length=0; 
        if(i<=0||i>s.length||i+j-1>s.length) 
                return str; 
        for(k=0; k<i-1; k++) 
                str.data[k]=s.data[k]; 
        for(k=0; k<t.length; k++) 
                str.data[i+k-1]=t.data[k]; 
        for(k=i+j-1; k<s.length; k++) 
                str.data[t.length+k-j]=s.data[k]; 
        str.length=s.length-j+t.length; 
        return str; 
} 
void DispStr(SqString s)//输出串s  
{        if(s.length>0) 
        {        for(int i=0; i<s.length; i++) 
                        printf("%c",s.data[i]); 
                printf("\n"); 
        } 
} 
测试程序代码: 
#include "sqstring.cpp" 
int main() 
{        SqString s,s1,s2,s3,s4; 
        printf("顺序串的基本运算如下:\n"); 
        printf("(1)建立串s和串s1\n"); 
        StrAssign(s,"abcdefghijklmn"); 
        StrAssign(s1,"123"); 
        printf("(2)输出串s:");DispStr(s); 
        printf("(3)串s的长度:%d\n",StrLength(s)); 
        printf("(4)在串s的第9个字符位置插入串s1而产生串s2\n"); 
        s2=InsStr(s,9,s1); 
        printf("(5)输出串s2:");DispStr(s2); 
        printf("(6)删除串s第2个字符开始的5个字符而产生串s2\n"); 
        s2=DelStr(s,2,5); 
        printf("(7)输出串s2:");DispStr(s2); 
        printf("(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2\n"); 
        s2=RepStr(s,2,5,s1); 
        printf("(9)输出串s2:");DispStr(s2); 
        printf("(10)提取串s的第2个字符开始的10个字符而产生串s3\n"); 
        s3=SubStr(s,2,10); 
        printf("(11)输出串s3:");DispStr(s3); 
        printf("(12)将串s1和串s2连接起来而产生串s4\n"); 
        s4=Concat(s1,s2); 
        printf("(13)输出串s4:");DispStr(s4); 
        DestroyStr(s);DestroyStr(s1);DestroyStr(s2);DestroyStr(s3);DestroyStr(s4); 
} 
最后谢谢鱼油解答,谢谢。
 本帖最后由 java2python 于 2020-5-29 11:07 编辑 
        //StrAssign(s,"abcdefghijklmn");     //参数是char[],给它的是String,当然对不上 
        char charconst[30] = "abcdefghijklmn";   //改成传入参数也是char[],就行了 
        StrAssign(s,charconst);
 
        或者声明部分加const:void StrAssign(SqString &s,const char *cstr)
 
代码,改了部分,让它能跑
 - #include <stdio.h>
 
 - #include <windows.h>
 
 - #define MaxSize 100
 
 - typedef struct
 
 - {        char data[MaxSize];
 
 -         int length;
 
 - } SqString;
 
 - void StrAssign(SqString &s,char cstr[])//将字符串常量赋给串s
 
 - {        int i;
 
 -         for(i=0; cstr[i]!='\0'; i++)
 
 -                 s.data[i]=cstr[i];            //■一个一个字符复制,需要下标
 
 -         s.length=i;
 
 - }
 
 - void DestroyStr(SqString &s)//销毁串
 
 - {}
 
 - void StrCopy(SqString &s,SqString t)//串复制
 
 - {        for(int i=0; i<t.length; i++)
 
 -                 s.data[i]=t.data[i];            //■一个一个字符复制,需要下标
 
 -         s.length=t.length;
 
 - }
 
 - bool StrEqual(SqString s,SqString t)//判串相等
 
 - {        bool same=true;
 
 -         if(s.length!=t.length)
 
 -                 same=false;
 
 -         else
 
 -                 for(int i=0; i<s.length; i++)
 
 -                         if(s.data!=t.data)
 
 -                         {        same=false;
 
 -                                 break;
 
 -                         }
 
 -         return same;
 
 - }
 
 - int StrLength(SqString s)//求串长
 
 - {        return s.length;
 
 - }
 
 - SqString Concat(SqString s,SqString t)//串连接
 
 - {        SqString str;
 
 -         int i;
 
 -         str.length=s.length+t.length;
 
 -         for(i=0; i<s.length; i++)
 
 -                 str.data[i]=s.data[i];
 
 -         str.data[s.length]='\0';
 
 -         return str;
 
 - }
 
 - SqString SubStr(SqString s,int i,int j)//求子串
 
 - {        SqString str;
 
 -         int k;
 
 -         str.length=0;
 
 -         if(i<=0||i>s.length||j<0||i+j-1>s.length)
 
 -                 return str;
 
 -         for(k=i-1; k<i+j-1; k++)
 
 -                 str.data[k-i+1]=s.data[k];
 
 -         str.length=j;
 
 -         return str;
 
 - }
 
 - SqString InsStr(SqString s1,int i,SqString s2)//插入子串
 
 - {        int j;
 
 -         SqString str;
 
 -         str.length=0;
 
 -         if(i<=0||i>s1.length+1)
 
 -                 return str;
 
 -         for(j=0; j<i-1; j++)
 
 -                 str.data[j]=s1.data[j];
 
 -         for(j=0; j<s2.length; j++)
 
 -                 str.data[i+j-1]=s2.data[j];
 
 -         for(j=i-1; j<s1.length; j++)
 
 -                 str.data[s2.length+j]=s1.data[j];
 
 -         str.length=s1.length+s2.length;
 
 -         return str;
 
 - }
 
 - SqString DelStr(SqString s,int i,int j)//删除子串
 
 - {        int k;
 
 -         SqString str;
 
 -         str.length=0;
 
 -         if(i<=0||i>s.length||i+j>s.length+1)
 
 -                 return str;
 
 -         for(k=0; k<i-1; k++)
 
 -                 str.data[k]=s.data[k];
 
 -         for(k=i+j-1; k<s.length; k++)
 
 -                 str.data[k-j]=s.data[k];
 
 -         str.length=s.length-j;
 
 -         return str;
 
 - }
 
 - SqString RepStr(SqString s,int i,int j,SqString t)//替换子串
 
 - {        int k;
 
 -         SqString str;
 
 -         str.length=0;
 
 -         if(i<=0||i>s.length||i+j-1>s.length)
 
 -                 return str;
 
 -         for(k=0; k<i-1; k++)
 
 -                 str.data[k]=s.data[k];
 
 -         for(k=0; k<t.length; k++)
 
 -                 str.data[i+k-1]=t.data[k];
 
 -         for(k=i+j-1; k<s.length; k++)
 
 -                 str.data[t.length+k-j]=s.data[k];
 
 -         str.length=s.length-j+t.length;
 
 -         return str;
 
 - }
 
 - void DispStr(SqString s)//输出串s
 
 - {        if(s.length>0)
 
 -         {        for(int i=0; i<s.length; i++)
 
 -                         printf("%c",s.data[i]);          //■一个一个字符输出,需要下标
 
 -                 printf("\n");
 
 -         }
 
 - }
 
 - //测试程序代码:
 
 - //#include "sqstring.cpp"
 
 - int main()
 
 - {        SqString s,s1,s2,s3,s4;
 
 -         printf("顺序串的基本运算如下:\n");
 
 -         printf("(1)建立串s和串s1\n");
 
 -         StrAssign(s,"abcdefghijklmn");
 
 -         StrAssign(s1,"123");
 
 -         printf("(2)输出串s:");
 
 -         DispStr(s);
 
 -         printf("(3)串s的长度:%d\n",StrLength(s));
 
 -         printf("(4)在串s的第9个字符位置插入串s1而产生串s2\n");
 
 -         s2=InsStr(s,9,s1);
 
 -         printf("(5)输出串s2:");DispStr(s2);
 
 -         printf("(6)删除串s第2个字符开始的5个字符而产生串s2\n");
 
 -         s2=DelStr(s,2,5);
 
 -         printf("(7)输出串s2:");DispStr(s2);
 
 -         printf("(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2\n");
 
 -         s2=RepStr(s,2,5,s1);
 
 -         printf("(9)输出串s2:");DispStr(s2);
 
 -         printf("(10)提取串s的第2个字符开始的10个字符而产生串s3\n");
 
 -         s3=SubStr(s,2,10);
 
 -         printf("(11)输出串s3:");DispStr(s3);
 
 -         printf("(12)将串s1和串s2连接起来而产生串s4\n");
 
 -         s4=Concat(s1,s2);
 
 -         printf("(13)输出串s4:");DispStr(s4);
 
 -         DestroyStr(s);DestroyStr(s1);DestroyStr(s2);DestroyStr(s3);DestroyStr(s4);
 
 -         system("pause");
 
 - }
 
  复制代码
执行结果: 
顺序串的基本运算如下: 
(1)建立串s和串s1 
(2)输出串s:abcdefghijklmn 
(3)串s的长度:14 
(4)在串s的第9个字符位置插入串s1而产生串s2 
(5)输出串s2:abcdefgh123ijklmn 
(6)删除串s第2个字符开始的5个字符而产生串s2 
(7)输出串s2:aghijklmn 
(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2 
(9)输出串s2:a123ghijklmn 
(10)提取串s的第2个字符开始的10个字符而产生串s3 
(11)输出串s3:bcdefghijk 
(12)将串s1和串s2连接起来而产生串s4 
(13)输出串s4:123  
 
 
 |   
 
 
 
 |