最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。
(这段代码是去除字符数组里面重复数组元素)
#include "header.h"extern int CountLength(char name[],int len);int DealArray(char num[]){printf("你输入的逻辑表达式的操作数(去除重复操作数):");int v=0;int g=CountLength(num,v);int i,j,k,L;for(i=0;i<g;i++) //冒泡循环{for(j=i+1;j<g;j++){if(num[j]==num[i]) //如果发现重复{for(k=j+1;k<g;k++){num[k-1]=num[k]; //将后面的数依次赋值给前一个位置}g--; //数组长度-1j--; //重复点再次进行查重}}}for(L=0;L<g;L++){printf("%c",num[L]);}printf("\n");return OK;}int main(){char n[]={'B','B','B','B','D','E'};DealArray(n);}
运行结果:
你输入的逻辑表达式的操作数(去除重复操作数):BDE虁
解决方法是在数组后面加一个'\0',数组结束符号
如果是在测试的话,在你自己输入的数组后面加一个'\0'数组元素
int main(){char n[]={'B','B','B','B','D','E','\0'};DealArray(n);}
如果是用for循环为数组赋值的话,记得在for循环结束后,为最后一个数组元素赋值'\0'
for(i=0;i<g;i++) //冒泡循环{for(j=i+1;j<g;j++){if(num[j]==num[i]) //如果发现重复{for(k=j+1;k<g;k++){num[k-1]=num[k]; //将后面的数依次赋值给前一个位置}g--; //数组长度-1j--; //重复点再次进行查重}}}num[g]='\0';