标题:救助
只看楼主
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
结帖率:44.44%
 问题点数:0 回复次数:10 
救助
有两个字符串a和b,比较两个字符串,把b中的不同字符串添加到a的末尾;
    请大家帮帮忙了!!!
搜索更多相关主题的帖子: 救助 
2008-10-01 19:31
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
得分:0 
[bo][un]s_k_y[/un] 在 2008-10-1 19:31 的发言:[/bo]

把b中的不同字符串添加到a的末尾;

b中存放的不是一个字符串吗?请把问题描述的清晰一些。

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-01 20:20
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
得分:0 
b中也是字符串
   比如a是acedeax ,b是acelo 比较后合并入b数组应该为acelodx。

 我写的是这样 ,但是有错误。

   #include "string.h"

int main(void)
{

   char a[]="acedeax";
   char b[]="acelo";
   char c[10];
   int i,j,n;
   i=j=n=0;
   while(a[i])
   {
       while(b[j])
       {
          if(a[i]==b[j])
            {

               for(i=0;a[i];i++)
               {    a[i]=a[i+1];

                }
                i=0;
                j=0;
                continue;
            }
          else
            if(j!=strlen(b)-1)
             j++;
              else
                {  c[n]=a[i];
                    n++;
                }
       }



   }
    c[n]='/0';

    printf("%s",strcat(b,c));

   getch();


  return 0;
}
2008-10-01 21:02
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
得分:0 
题目中说的不是添加到a,我在这里也添加到b中

你的程序问题,字符数组a,b定义后,他们的空间大小也随之确定了,但你追加其他的字符后,会出现越界的错误

#include  "stdio.h"
#include  "string.h"
int  main()
{
   char  a[10],b[20];
   int  a_len, b_len;
   a="my name is";
   b="shang gu";
   a_len=strlen(a);
   b_len=strlen(b);
   for(int i=0;i<b_len;i++)
    {    int flag=1;
         for(int j=0;j<b_len;j++)
          {
            if(a[i]==b[j])
              { flag=0;break;}
           }
          if(flag==1)
           { b[b_len]=a[i];b_len++;  }
     }
b[b_len]='\n';
printf("%s\n",b);
return 0;
}

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-01 21:28
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
得分:0 
谢谢你呀
   我把你的做了一些改动, 也可以动过编译。我原来想的是把数组a元素与b比较后,发现相等就把a数组前移,要是有不同的元素就把它存入到c数组中。然后来接b与c数组。
  但是下面的程序b已经是确定数组,为何还可以b[b_len]=a[i]这样字符数组追加元素呢?
   #include  "string.h"
int  main(void)
{

   int  a_len, b_len,i,j,flag;
   char a[]="acedeax";
   char b[]="acelo";
   a_len=strlen(a);
   b_len=strlen(b);
   for(i=0;i<a_len;i++)
    {     flag=1;
         for(j=0;j<b_len;j++)
          {
            if(a[i]==b[j])
              { flag=0;break;}
           }
          if(flag==1)
           { b[b_len]=a[i];b_len++;  }
     }
b[b_len]='\0';
printf("%s\n",b);
getch();
return 0;
}
2008-10-01 21:51
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
得分:0 
谢谢你呀
   我把你的做了一些改动, 也可以动过编译。我原来想的是把数组a元素与b比较后,发现相等就把a数组前移,要是有不同的元素就把它存入到c数组中。然后来接b与c数组。
  但是下面的程序b已经是确定数组,为何还可以b[b_len]=a[i]这样字符数组追加元素呢?
   #include  "string.h"
int  main(void)
{

   int  a_len, b_len,i,j,flag;
   char a[]="acedeax";
   char b[]="acelo";
   a_len=strlen(a);
   b_len=strlen(b);
   for(i=0;i<a_len;i++)
    {     flag=1;
         for(j=0;j<b_len;j++)
          {
            if(a[i]==b[j])
              { flag=0;break;}
           }
          if(flag==1)
           { b[b_len]=a[i];b_len++;  }
     }
b[b_len]='\0';
printf("%s\n",b);
getch();
return 0;
}
2008-10-01 21:57
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
得分:0 
这样可以吗,我觉得是不可以呀

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-01 21:58
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
得分:0 
我也觉得不可以 但是编译通过了 而且结果正确
  就想问问
2008-10-01 22:03
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
得分:0 

有点头绪,我们开辟的空间不足时,即越界了。字符串的输出时以'\0',结束,若没遇到,则继续寻找b数组后面的内容,直至遇到'\0'.b其后的地址空间的内容我们给改变了,以作b的空间,这样做有可能把原先定义的变量的值给改变(此变量恰在此空间中),造成错误。

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-01 22:31
s_k_y
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2008-2-2
得分:0 
那但是char b[]="acelo"; 这一句话系统已经给他指定了大小。也就是固定的了。要是还可以改变'\0'的位置,那这个就是不固定数组了。
   是我哪里没弄明白吗?
2008-10-01 22:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-236034-1-1.html




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

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