|
|
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.");
}
} |
|
|
|
|
|
|
|
|
|
|
发表于 24-9-2008 02:09 PM
|
显示全部楼层
如果你的目的是制造一个真正的 stack,并正确的使用 stack,那你完全做错了。你现在所作的只是一个模仿 stack 的外表的 array。。。- 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
|
显示全部楼层
- //---------------------------------------------------------------------------
- #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[i]);
- }
- 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--];
- }
- //---------------------------------------------------------------------------
复制代码 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 24-9-2008 04:16 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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)。 |
|
|
|
|
|
|
|
|
|
|

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

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

楼主 |
发表于 13-10-2008 09:47 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
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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]
啊哩咖豆叩在嘛! |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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 之间加点东西而以。。。 |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|