佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: 1max1

C++ programming 高手请进来帮忙。

[复制链接]
 楼主| 发表于 24-9-2008 10:31 AM | 显示全部楼层
题目:Write a program that inputs a line of text and uses a stack to print the line reversed.

不懂做么在Enter a line of text后就没有东西,检查下也没有error ,请帮忙看下那里出错了。
#include<stdio.h>
#include<string.h>

typedef struct stack_tag
{    int top;
    char entry[99];
}Stack_type;
Stack_type Stack;
Stack_type *S;

void main()
{    char text[99];
    char item;
    int i;
    S=&Stack;
    S->top=-1;
    printf("Enter a line of text: ");
    gets(text);
    strcpy(S->entry,text);
    for(i=0;S->entry=!NULL;i++)
    {    ++S->top;
    }
    if(S->top>-1)
    {    while(S->entry[S->top]=!NULL)
        {    item=S->entry[S->top--];   
            printf("%c",item);
        }
    }else
    {    printf("No text have been enter.");
    }
}
回复

使用道具 举报


ADVERTISEMENT

发表于 24-9-2008 02:09 PM | 显示全部楼层
如果你的目的是制造一个真正的 stack,并正确的使用 stack,那你完全做错了。你现在所作的只是一个模仿 stack 的外表的 array。。。
  1. while(S->entry[S->top]=!NULL)
复制代码
=!  ????

这是哪里来的 operator ????
你这样写就变成 assigning invert of NULL to S->entry[s->top] 了!

[ 本帖最后由 geekman 于 24-9-2008 02:29 PM 编辑 ]
回复

使用道具 举报

发表于 24-9-2008 02:53 PM | 显示全部楼层
  1. //---------------------------------------------------------------------------
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <mem.h>
  6. #pragma hdrstop

  7. //---------------------------------------------------------------------------
  8. typedef struct
  9. {
  10.         int index;
  11.         char data[99];
  12. }char_stack;

  13. char_stack stack;
  14. void init_stack(void);
  15. void push_stack(char);
  16. char pop_stack(void);

  17. #pragma argsused
  18. void main(void)
  19. {
  20.         char str[99];
  21.         int length;

  22.         clrscr();
  23.         init_stack();
  24.         printf("Please input a string: ");
  25.         gets(str);

  26.         length = strlen(str);
  27.         for(int i=0; i<length; i++)
  28.         {
  29.                 push_stack(str[i]);
  30.         }
  31.         printf("\nThis is your string in reverse:\n\n");
  32.         while(stack.index > -1)
  33.         {
  34.                 putch(pop_stack());
  35.         }
  36.         printf("\n\nPress a key to continue...");
  37.         getch();
  38. }
  39. //---------------------------------------------------------------------------
  40. void init_stack(void)
  41. {
  42.         stack.index = -1;
  43.         memset(stack.data, 0, 99);
  44. }
  45. //---------------------------------------------------------------------------
  46. void push_stack(char c)
  47. {
  48.         stack.index++;
  49.         stack.data[stack.index] = c;
  50. }
  51. //---------------------------------------------------------------------------
  52. char pop_stack(void)
  53. {                                    
  54.         return stack.data[stack.index--];
  55. }
  56. //---------------------------------------------------------------------------
复制代码
回复

使用道具 举报

 楼主| 发表于 24-9-2008 04:16 PM | 显示全部楼层
原帖由 geekman 于 24-9-2008 02:09 PM 发表
如果你的目的是制造一个真正的 stack,并正确的使用 stack,那你完全做错了。你现在所作的只是一个模仿 stack 的外表的 array。。。 while(S->entry[S->top]=!NULL)=!  ????

这是哪里来的 operator ???? ...

其实是想不到如何将string放进stack里。
因该是!=才对。
回复

使用道具 举报

 楼主| 发表于 24-9-2008 04:26 PM | 显示全部楼层
原帖由 geekman 于 24-9-2008 02:53 PM 发表
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <mem.h>
#pragma hdrstop

//---------------------------------------------------------------------------
typedef struct
{
        int index;
        char data[99];
}char_stack;

char_stack stack;
void init_stack(void);
void push_stack(char);
char pop_stack(void);

#pragma argsused
void main(void)
{
        char str[99];
        int length;

        clrscr();
        init_stack();
        printf("Please input a string: ");
        gets(str);

        length = strlen(str);
        for(int i=0; i<length; i++)
        {
                push_stack(str);
        }
        printf("\nThis is your string in reverse:\n\n");
        while(stack.index > -1)
        {
                putch(pop_stack());
        }
        printf("\n\nPress a key to continue...");
        getch();
}
//---------------------------------------------------------------------------
void init_stack(void)
{
        stack.index = -1;
        memset(stack.data, 0, 99);
}
//---------------------------------------------------------------------------
void push_stack(char c)
{
        stack.index++;
        stack.data[stack.index] = c;
}
//---------------------------------------------------------------------------
char pop_stack(void)
{                                    
        return stack.data[stack.index--];
}
//---------------------------------------------------------------------------

请问这三个如何应用?
#pragma hdrstop,#pragma argsused,memset(stack.data, 0, 99);
回复

使用道具 举报

发表于 24-9-2008 05:08 PM | 显示全部楼层
pragma 是C++ Builder 自己加进去的,基本上我们可以无视,因为这些是compiler instruction 来的,属于系统自理的指令。

memset(target_address, value_to_set, size_to_set),请自行查询你的IDE的document file。这个 function 隶属 mem.h 这个Header file.

在这个 program 里面,我是用它来把char data[99] 全部清空为 0, size_to_set = 99 = stack.data[99] 的大小 (99 bytes)。
回复

使用道具 举报

Follow Us
 楼主| 发表于 24-9-2008 06:57 PM | 显示全部楼层
谢谢你帮了这个大忙!
回复

使用道具 举报

 楼主| 发表于 13-10-2008 05:54 PM | 显示全部楼层
rand() 与 srand() 有何分别?
回复

使用道具 举报


ADVERTISEMENT

发表于 13-10-2008 09:16 PM | 显示全部楼层
原帖由 1max1 于 13-10-2008 05:54 PM 发表
rand() 与 srand() 有何分别?


以小弟很表面化的理解,
如果只是用rand,出来的号码是会一直重复的
如果想要它random, 就要配合用srand了
然后这个srand是要给种子的,seed, 我也不懂什么来的

这个seed是要每次都不一样的,号码才不会重复
所以就要用这个srand(time(0))
time(0)是根据电脑的CLOCK来变出不一样的SEED
回复

使用道具 举报

 楼主| 发表于 13-10-2008 09:47 PM | 显示全部楼层
原帖由 lliioonn 于 13-10-2008 09:16 PM 发表


以小弟很表面化的理解,
如果只是用rand,出来的号码是会一直重复的
如果想要它random, 就要配合用srand了
然后这个srand是要给种子的,seed, 我也不懂什么来的

这个seed是要每次都不一样的,号码才不 ...

原来 srand 的 s 是用来阻止出现重复的号码。

比如说我们要从 0至4 里面random选一个要怎样弄?

[ 本帖最后由 1max1 于 13-10-2008 09:48 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 13-10-2008 10:05 PM | 显示全部楼层
typedef  struct stack_tag
{    int top;
    int entry[MAXSTACK];
}Stack_type;

Stack_type *S;

vs

typedef  struct stack_tag
{    int top;
    int entry[MAXSTACK];
}Stack_type;

typedef Stack_type *S;
*S startptr;

请问这两不同的 data type 与 variable 会弄出怎么不一样的效果?
回复

使用道具 举报

发表于 14-10-2008 11:03 AM | 显示全部楼层
rand() % 4
回复

使用道具 举报

 楼主| 发表于 15-10-2008 10:25 AM | 显示全部楼层
原帖由 solidx 于 14-10-2008 11:03 AM 发表
rand() % 4

谢谢。

[ 本帖最后由 1max1 于 11-11-2008 09:56 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 10-11-2008 03:25 PM | 显示全部楼层
char string[3]="abc";

error C2117: 'string' : array bounds overflow       

a b c 不就三个字,怎么会 overflow?
回复

使用道具 举报

发表于 10-11-2008 09:19 PM | 显示全部楼层
string还包括一个null terminator。
"abc" = [a,b,c,0x00]

[ 本帖最后由 geekman 于 10-11-2008 09:20 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 11-11-2008 09:53 AM | 显示全部楼层
原帖由 geekman 于 10-11-2008 09:19 PM 发表
string还包括一个null terminator。
"abc" = [a,b,c,0x00]

啊哩咖豆叩在嘛!
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 21-1-2009 05:47 PM | 显示全部楼层
printf("10 divided by 4 equals %f",result);
Output
10 divided by 4 equals 2.500000
Press any key to continue . . .

请问如何把多余的零位数去掉同时也能显示所有的余数?
回复

使用道具 举报

发表于 22-1-2009 11:12 PM | 显示全部楼层
原帖由 1max1 于 21-1-2009 05:47 PM 发表

请问如何把多余的零位数去掉同时也能显示所有的余数?

通常我们是把数目固定去特定位数罢了 "%d" -> "%.4d" (四位数)

如果你真的要把零取掉,不是不可行。。但比较麻烦,而且毫无意义的。。。
先把你的数字用sprintf 放在一个buffer里,然后从后面找有多少个零,删减后再output....
回复

使用道具 举报

发表于 23-1-2009 01:21 PM | 显示全部楼层
C 真的不好學 .... 好痛苦
回复

使用道具 举报

 楼主| 发表于 23-1-2009 03:12 PM | 显示全部楼层
原帖由 yeenfei 于 22-1-2009 11:12 PM 发表

通常我们是把数目固定去特定位数罢了 "%d" -> "%.4d" (四位数)

如果你真的要把零取掉,不是不可行。。但比较麻烦,而且毫无意义的。。。
先把你的数字用sprintf 放在一个buffer里,然后从后面找有多少个零,删 ...

原来难行,本以为只要在 % 和 f 之间加点东西而以。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 11-12-2025 06:39 PM , Processed in 0.127327 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表