论坛: 编程破解 标题: 字符串操作str1和str2(爱好者看过来,特邀286进来) 复制本贴地址    
作者: ljsh012 [ljsh012]    论坛用户   登录
题目:
把字符串str1中和str2相同的字符去掉后再输出来.比如:str1="abc",str2="aef",程序运行后输出字符串"bc".
以下是我的程序,可是编译没出错,执行确错了.请指教.
#include <stdio.h>
main()
{
  int k,i,j;
  char* str1;
  char *temp;
  char* str2;
  char str[20];
  str1="vabc";
  str2="gaod";
  for(i=0;i<4;i++)  //外循环,把字符串str1中的每个字符和str2中的都进行比较
{
  temp=str1;
  for(j=0;j<4;j++)
{
  if((*(temp)!=*(str2++))&&j<3)  //如果比较到第三个字符还不等的话,继续把J自加比较.
  continue;
  else if(*(temp)==*(str2++))  //如果相等就退出内循环,把str1自加后再进行内循环比较.
    break;
    if(j==3&&(*(temp)!=*(str2++))) //如果已经比较到str2的最后一位并且不相等,那么符合输出条件,把它赋给                                                                                  //一个字符数组.
    str[k++]=*temp;
}
str1++;
}
for(k=0;k++;)
{
  printf("%c",str[k]);  //输出结果
}
getchar();
}

可是程序编译通过而执行不出来.    如果有另外好的算法的话,希望贴出来共享.谢谢.(上面的程序固化了字符串,不友好)

地主 发表时间: 05-11-28 12:41

回复: 286 [unique]   版主   登录
#include <string.h>
把strlen,find,strcat都用上。

B1层 发表时间: 05-11-28 16:52

回复: lida1818 [lida1818]   论坛用户   登录
#include <stdio.h>
#include <string.h>
void foo(  char *str1,char *str2);
int main()
{
  char *str1="";
  char *str2="";
  foo(str1,str2);
}
void foo(  char *str1,char *str2)
{
    int flog;
    char *tem1=str1,*tem2=str2;
    if(!tem1)return;
    while(*tem1)
    {
        flog = 0;
        tem2=str2;
        while(*tem2)
        {
            if(*tem1==*tem2)
            {
                flog=1;
                break;
            }
            tem2++;
        }
        if(!flog)putchar(*tem1);
        tem1++;
    }

}

B2层 发表时间: 05-11-29 10:39

回复: ljsh012 [ljsh012]   论坛用户   登录
是这样的,它题目要求不能用任何API,我以为<string.h>已经属于API了。因为c中没有String类型。
所以就没用String.h了。(理解上的错误?)如果用它,程序就好写了。

上面的程序觉得蛮不错,正在细细品味。这久一直在用java,c的一些基本东西都给忘了。看来得好好复习一下了。

[此贴被 霜泉(ljsh012) 在 11月29日10时55分 编辑过]

B3层 发表时间: 05-11-29 10:41

回复: xiaoshi [xiaoshi]   论坛用户   登录
烟雨平生的程序看了,感觉不错,但有个地方不明白
在foo函数中,前面定义了个,*tem2=str2,但是后面
循环的时候怎么有个来个tem2=str2;这个不清楚?

if(!tem1)我的理解是,如果(非指针),
我感觉这个值不会出现0的结果吧,
属我愚昧,多指教.



B4层 发表时间: 05-12-02 19:25

回复: ljsh012 [ljsh012]   论坛用户   登录
问得好!
是这样的:
第二个tem2=str2是因为你把str1的第一个字符和str2的所有字符比较完后temp2已经指到str2的最后一位字符了。而外循环第二次得把str1的第二个字符再和str2的所有字符比较,所以当然得把str2的首地址重先赋值给temp2了。
至于第二个问题我是这么理解的,如果没有传入参数,那么指针也就不会被初始化,取反后程序就退出。

B5层 发表时间: 05-12-02 23:20

回复: xiaoshi [xiaoshi]   论坛用户   登录
还是没怎么搞明白,回去动手看看,也许回理解点
不过你说的指针没有初始化,我好象没听过指针没有初始化的情况下可以做逻辑操作啊
也许我少见多怪吧,哈哈,好长时间都没动过手了,好多东西还停在学校的记忆上了.

B6层 发表时间: 05-12-03 17:46

回复: lida1818 [lida1818]   论坛用户   登录
#include <stdio.h>
#include <string.h>
void foo(  char *str1,char *str2);
int main()
{
  char *str1=null;
  char *str2="1234";
  foo(str1,str2);
}
void foo(  char *str1,char *str2)
{
    int flog;
    char *tem1=str1,*tem2=str2;
    if(!tem1)return;
    while(*tem1)
    {
        flog = 0;
        tem2=str2;
        while(*tem2)
        {
            if(*tem1==*tem2)
            {
                flog=1;
                break;
            }
            tem2++;
        }
        if(!flog)putchar(*tem1);
        tem1++;
    }

}
假如这种情况下,就有用了,这只是一个容错。if(!tem1||!tem2)return;
确保指针为非空指针,那天只是随意在IE上敲了几句。


B7层 发表时间: 05-12-04 11:27

回复: ljsh012 [ljsh012]   论坛用户   登录
c中没有null
楼上的?
其实我觉得不用容错也行。因为没有null。所以程序不可能出错的。如果是出现野指针的情况,那个语句也是没用的。因为野指针也总是正值。除非00000 ~_~
请指教。谢谢。

B8层 发表时间: 05-12-04 14:07

回复: lida1818 [lida1818]   论坛用户   登录
是NULL
自己定义一个null也行,就是 0
#include <stdio.h>
char *ptr1;
int main()
{
  char *ptr0=NULL;

  printf("%p  %p",ptr0,ptr1);

}


B9层 发表时间: 05-12-04 22:52

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号