本文目录一览:
- 1、c语言关于栈的问题
- 2、c语言中用栈或者表做字符串的连接,可以输入字符串
- 3、c语言定义字符数组栈的问题
- 4、c语言栈的应用输入一个字符串,删除其中相邻的两个相同字符?
- 5、C语言 (栈的应用)任意输入一个字符串 逆序输出
c语言关于栈的问题
首先你题目没理解正确
(1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong
就是([123)这种应该输出wrong,而不是missing right
其次你的思路不太对,既然知道这题是考你栈结构的你就应该用栈解决啊,给你几个提示:
1、这题只用一个数组作为栈的物理空间就够了(当然还要有个char数组存放输入)
2、这题你用不着保存数字和右括号
3、绝大多数match以外的字符串不用扫描全就可以输出了,不然就算不WA可能要TO了
4、push pop peek这三种栈的操作都要用上
(算法思路,想独立完成就别看)
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
从左往右扫描字符串
遇到左括号压栈
遇到右括号去和栈顶匹配
栈已经空了没栈顶: miss left
匹配成功:弹出栈顶继续扫描
匹配不成功:wrong
遇到字符结尾
栈空了:match
否则:miss right
遇到其他数字啥的忽略掉
c语言中用栈或者表做字符串的连接,可以输入字符串
先定义一个栈,输入一个字符串,利用循环语句把你输入的字符串放到栈中,假设你输入的是n个字符的字符串,则,此时栈的top指针指向n-1,这个位置,再输入你要连接的这个字符串(第二个字符串,假设为x个字符),再利用循环语句,从top +1的位置依次将第二个字符串的各个字符放入栈中,此时top指针指向x+n-1的位置..............不知 是不是你要的答案
c语言定义字符数组栈的问题
char stack[100] = {0}; //数组给初值,不能是{}必须,至少要有一个值!
for(int i=0;istrlen(s);i++)
{
s[i] ='\0'; //这里不是很明白,你赋值一个{}是什么意思,但如果是想清0,就改成这样写!
}
c语言栈的应用输入一个字符串,删除其中相邻的两个相同字符?
#includestdio.h
int main(){
char s[1000];
int i=0;
scanf("%c",s[i]);
while(s[i]!='\n'){
scanf("%c",s[++i]);
if(s[i]==s[i-1])
i-=2;
}
s[i]='\0';
if(s[0])puts(s);
else printf("None");
}
C语言 (栈的应用)任意输入一个字符串 逆序输出
#include
stdio.h
#include
string.h
/*
函数名称:字符串逆序输出
函数功能:字符串逆序输出
输入参数:原字符串
返回参数:逆序字符串
*/
void
f
(char
s[1000])
{
int
i,
len;
len
=
strlen(s);
for
(i
=
len-1;
i
=
0;
i--)
putchar(s[i]);
}
int
main()
{
char
s[1000];
while
(gets(s))
{
f(s);
printf("\n");
}
return
0;
}