程序设计的思想以及应该避免的错误都在代码中旁的注释中有标明,此程序适用于串的顺序(即普通的数组形式的创建)和堆创建,此外,此代码并不难,只是运用简单的数组的思想,希望对你有所帮助,最好,看明白后,自己别看,然后打出来,如果是照抄,希望最少抄两遍
//非常抱歉,由于程序在设计之初是本着开辟一个随机位置的数组进行编程的,但是在检验时发现此程序最大也就只能记录到127个字符, //所以在程序中str类型的数组应该第一个都啥都没存,后期加了一个int型的数来存储,程序改了好几遍,不过不影响整体思维设计部分 //应该..应该这个版本是CSDN里堆顺序串最全的,但是依然有些许的小bug,但但....不出意外,你找不到我的bug,这个bug不影响程序运行 //但是对于空间有些许的浪费,时间不多,累了,有时间再来改 #include//我发现个bug,捏码,数组怎么销毁,你能删除一个int型的数吗,这不是扯淡嘛,所以..我写的是主题是堆,但emmm.思想一样 #include #include using namespace std; #define MAX 255 typedef struct Str { //另外请注意,因为第一位存储的并不是字符而是字符串的长度,所以后边的很多地方需要向后一位!!!请注意 char *ch; int len;//踏马的,忘了char也就只能存127这么大,擦擦擦擦擦擦,这牛马我不待改完,尼玛 //上边和下边其实没有什么区别,但利于销毁 //char ch[MAX+1];//若是用第一个位值的元素存储此串的长度,那么是肯定不必重新定义一个len的 //int len; }Str; void menu(void); void caidancaozuo(Str& str); void StrAssign(Str& str);//初始化一个串,并且在一个串中加入一串连续的值就是让用户随便的输入一串字符 void StrEmpty(Str str);//判断是否为空,是否存在,最简单了 void StrCopy(Str& str);//复制一个串 void Strcat(Str& str);//在第一个串后加入一个串 void Index(Str str);//检索到你想要查的某一个字符在此字符串中出现的地方,检索一串的emmm...下一个再写 void insert(Str& str);//插入一个字符 void Replace(Str& str);//替换一个字符 void Clear(Str& str);//清空字符串 void Destroy(Str& str);//销毁字符串 void OutPut(Str str);//输出整个字符串 void OutPutIndex(Str str);//输出你要从哪一个位置开始的后面的所有的字符串 void OutLen(Str str);//输出字符串的长度 非常之easy int main(void) { Str str; menu(); caidancaozuo(str); } void menu(void) { //我觉得我这个菜单写的不赖很经典,写前边了,哈哈哈哈哈 char a01[] = "(1)创建顺序串"; char a02[] = "(2)判断是否为空以及判断否存在"; char a03[] = "(3) 复制一个串"; char a04[] = "(4)第一个串后加入一个串(即追加,不过会这个,插入一段一定会) "; char a05[] = "(5)查找某个字符在串中的位置"; char a06[] = "(6)插入一个字符"; char a07[] = "(7)替换一个字符"; char a08[] = "(8)清空字符串"; char a09[] = "(9)销毁字符串"; char a10[] = "(10)输出整个字符串"; char a11[] = "(11)输出你要从哪一个位置开始的后面的所有的字符串"; char a12[] = "(12)串的长度"; char a13[] = "输入入任意不在前面菜单的数字将结束程序"; printf("%-50s", a01); printf("%-50sn", a02); printf("%-50s", a03); printf("%-50sn", a04); printf("%-50s", a05); printf("%-50sn", a06); printf("%-50s", a07); printf("%-50sn", a08); printf("%-50s", a09); printf("%-50sn", a10); printf("%-50s", a11); printf("%-50sn", a12); printf("%-50sn", a13); } void caidancaozuo(Str& str)//再次自我感觉良好觉得这个自我调用也不赖,放前边了 { cout << "请问你想选择哪个指令" << endl; int mingling; cin >> mingling; switch (mingling) { case 1: { StrAssign(str); caidancaozuo(str); break; } case 2: { StrEmpty(str); caidancaozuo(str); break; } case 3: { StrCopy(str); caidancaozuo(str); break; } case 4: { Strcat(str); caidancaozuo(str); break; } case 5: { Index(str); caidancaozuo(str); break; } case 6: { insert(str); caidancaozuo(str); break; } case 7: { Replace(str); caidancaozuo(str); break; } case 8: { Clear(str); caidancaozuo(str); break; } case 9: { Destroy(str); caidancaozuo(str); break; } case 10: { OutPut(str); caidancaozuo(str); break; } case 11: OutPutIndex(str); caidancaozuo(str); break; case 12: OutLen(str); caidancaozuo(str); break; default: cout << "您已经决定退出此程序,程序即将退出" << endl; break; } } void StrAssign(Str& str) { //内个啥 内个你输入空格就退出了嗷,空格后边的不算 str.ch=(char*)malloc(sizeof(char)*(MAX+1)); str.len=0;//经实验得出结果s的值或许需设的特别大 cout<<"请输入一串字符(范围是1到254)"<


