本文目錄一覽:
- 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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/287260.html