最近在完成数据结构作业,在代码过程中经常遇到一些小问题,比如在输出字符串数组时,在一串自己想要的字符后面经常会出现一些不知名的汉字乱码。
(这段代码是去除字符数组里面重复数组元素)
#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--; //数组长度-1
j--; //重复点再次进行查重
}
}
}
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--; //数组长度-1
j--; //重复点再次进行查重
}
}
}
num[g]='\0';