華為機試(仿LISP字串運算)

2021-08-03 04:22:36 字數 1738 閱讀 6263

[程式設計|300分] 仿lisp字串運算

時間限制:3秒

空間限制:32768k

題目描述

lisp語言唯一的語法就是括號要配對。

形如 (op p1 p2 …),括號內元素由單個空格分割。

其中第乙個元素op為操作符,後續元素均為其引數,引數個數取決於操作符型別

注意:引數 p1, p2 也有可能是另外乙個巢狀的 (op p1 p2 …)

當前op型別為 quote / reverse / search / combine 字串相關的操作:

- quote: 引用乙個字串,即返回字串本身內容

引數個數 1

- reverse: 把字串反轉,並返回

引數個數 1

- search: 在第乙個字串中查詢第二個字串的第一次出現,返回從這開始到結束的所有字串

如果查詢不到,返回空字串

引數個數 2

- combine: 把所有字串組合起來

引數個數不定,但至少 1 個

其中p1, p2 等引數可能是帶雙引號的字串,如 「abc」,也有可能是另外乙個 (op p1 p2 …)

上述字串包括引號;引號中間的所有字元,均為 ascii 可列印字元,且不會再出現引號 (「)

輸出也為帶雙引號的字串

舉例:

輸入字串 輸出結果

(quote 「!@#

%」 (reverse 「a b c」) 「c b a」

(search 「abcdef」 「cd」 ) 「cdef」

(search 「abcdef」 「xy」 ) 「」

(combine 「a」 「b」 「cde) 「) 「abcde) 」

(search (combine 「1234567890」 「abcdefgh」 「1234567890」) (reverse 「dc」)) cdefgh123456789

輸入描述:

合法c字串,字串長度不超過512;用例保證了無語法錯誤.

輸出描述:

合法c字串,需要帶括號

輸入例子:

(search 「huawei」 「we」)

輸出例子:

「wei」

**:(做的時候,只通過部分,以下是事後修改的**,不知是否能ac)

#include 

#include

#include

#include

#include

int main()

if (str[i] == '(')

else

if (str[i] == ')')

strs.pop();

if (curop == "quote")

else

if (curop == "reverse")

else

if (curop == "search")

else

}else

if (curop == "combine")

strs.push(tmp);

}++i;

}else

}std::cout

<< "\""

<< strs.top() << "\""

<< std::endl;

system("pause");

return

0;}

2017華為機試(仿LISP字串運算)

程式設計 300分 仿lisp字串運算 題目描述 lisp語言唯一的語法就是括號要配對。形如 op p1 p2 括號內元素由單個空格分割。其中第乙個元素op為操作符,後續元素均為其引數,引數個數取決於操作符型別 注意 引數 p1,p2 也有可能是另外乙個巢狀的 op p1 p2 當前op型別為add...

2017華為機試(仿LISP字串運算)

程式設計 300分 仿lisp字串運算 題目描述 lisp語言唯一的語法就是括號要配對。形如 op p1 p2 括號內元素由單個空格分割。其中第乙個元素op為操作符,後續元素均為其引數,引數個數取決於操作符型別 注意 引數 p1,p2 也有可能是另外乙個巢狀的 op p1 p2 當前op型別為add...

華為機試題 仿LISP字串運算 C 實現

題目描述 lisp語言唯一的語法就是括號要配對。形如 op p1 p2 括號內元素由單個空格分割。其中第乙個元素op為操作符,後續元素均為其引數,引數個數取決於操作符型別 注意 引數 p1,p2 也有可能是另外乙個巢狀的 op p1 p2 當前op型別為add sub mul div 全小寫 分別代...