我正在制作一个程序,它接受用户输入并根据用户的选项选择处理输入。假设我输入一个类似&#34的字符串;你好4是一个数字,5也是#34;。如何从字符串中取出数字并将它们放在变量中? (在我的例子中,我希望使用4和5。)
答案 0 :(得分:0)
所以,我写了一些代码来解决你的问题。第一个也是最简单的情况:你将句子作为列表传递,如[hello,4,is,5,and]
。在这种情况下,您需要检查列表中的元素是否为数字with number/1
:
parseSentence([],[]).
parseSentence([H|T],L):-
\+(number(H)),
parseSentence(T,L).
parseSentence([H|T],[H|T1]):-
number(H),
parseSentence(T,T1).
?- parseSentence([hello,4,is,5,and],L).
L = [4, 5].
false
第二个也是最有趣的案例:你将句子作为字符串传递,如下所示:" hello 4是一个数字,5也是#34;。这里的代码(有点多余,以使其更清晰):
parseSentenceMod([],[]).
parseSentenceMod([H|T],[A|T1]):-
atom_number(H,A),
parseSentenceMod(T,T1).
parseSentenceMod([H|T],L):-
\+(atom_number(H,_)),
parseSentenceMod(T,L).
findAtom([],[]).
findAtom([H|T],[H1|T1]):-
atom_string(H1,H),
findAtom(T,T1).
parseString(S,P,A,N):-
split_string(S," ","",P),
findAtom(P,A),
parseSentenceMod(A,N).
?- parseString("hello 4 is a number, and 5 is as well",S,A,N).
A = [hello, '4', (is), a, 'number,', and, '5', (is), (as), well],
N = [4, 5],
S = ["hello", "4", "is", "a", "number,", "and", "5", "is", "as", "well"]
false
atom_number/2
检查原子是否为数字,atom_string/2
创建给定字符串的原子,split_string/4
将字符串拆分为子串,在本例中为空格。希望它有所帮助。