c語言解決特殊字元對齊問題

2021-08-06 03:15:30 字數 1482 閱讀 6272

問題如下:

給出乙個字串,包含(){}<>四種字元,試給出一演算法,實現字串格式檢查

檢查成對的字元是否位置正確有效

eg:<{}>()有效

asd<2gss>ss(s)d有效

《無效\

解決思路:

基本就是遍歷整個字串依次判斷,這裡提供一種技巧,就是用棧的方法。

所有的左括號都直接進棧,

然後右括號就判斷棧定是不是跟當前右括號匹配的,

如果匹配就兩個都出棧,如果不匹配就繼續遍歷,

最後棧是空的就說明是符合要求的。如果有不明白可以自己畫圖思考。這裡簡單舉例說明。

假如有字串" < [ ] > " ,有空增棧乙個。首先開始遍歷字串,查到第乙個特殊符號' < '把他入棧,然後繼續遍歷查到第二個特殊符號' [ '也入棧,然後第三個特殊符號' ] ',根據棧的特性,此時棧頂為' [ '判斷它是否和『 ] 』對應,如果對應則出棧,否則不進行操作。這裡是對應的就出棧了,同樣的道理遍歷到最後乙個元素時,也會有出棧操作,最終這個棧為空,說明所有特殊符號的位置是符合要求的。

而對於字串" [ ",我們可知在' [ '和' linkstack_t;

/** *@brief 建立乙個空的棧

*/linkstack_t *linkstack_creat()

header->next=null;

return header;

}/**

*@brief 檢查棧是否為空

*/int linkstack_empty(linkstack_t *header)

return 0;

}/**

*@brief 入棧

*/int linkstack_insert(linkstack_t *header,datatype_t value)

insert->data=value;

insert->next=header->next;

header->next=insert;

return 0;

}/**

*@brief 出棧

*/datatype_t linkstack_out(linkstack_t *header)

datatype_t linkstack_peek(linkstack_t *header)

/** *@brief 列印棧的所有資料

*/int linkstack_show(linkstack_t *header)

}/**

*@brief 檢查特殊符號是否對齊

*/ int check_str(char *str)

'||str_char == ')')

break;

case '}':

if(linkstack_peek(s1)=='

} str++;

} return linkstack_empty(s1);

} int main(void)

else

}

c語言記憶體對齊問題

計算機中的記憶體都是按照byte為單位進行分配,在理論上資料可以儲存在記憶體中的任意位置。計算機為了提高工作效率,一般要求記憶體中的資料存放在特定的位置,使計算機用最少的機器週期便可以訪問到這個資料,這就是c語言中的記憶體對齊問題。這裡以 int 型資料為例,如果記憶體中的資料按照4位元組對齊儲存,...

C語言結構體對齊 記憶體對齊問題

c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?有人給對齊原則做過總結,具體在 看到現在已記不起來,這裡引用一下前人...

c語言位元組對齊問題(一)

在這裡只總結結構體的位元組對齊問題,看下面的結構體 struct s1 char a int b short c struct s2 char a short c int b 那麼sizeof s1 12,sizeof s1 8 我們可以假定結構體在記憶體中的位址是0x0000開始的,那麼我們說的位...