我有一个看起来像这样的字符串:
def foo(L1,L2):
res=[]
for lst in L1:
if lst in L2:
res.append(lst)
return res
我试图获得HELLO,200和剩下的字符串。不幸的是,该字符串可能包含"HELLO 200 Now some random text\n now more text\t\t"
和\n
,因此我无法使用\t
。
我尝试了以下方法:
%[^\n\t]
之后变量是:
char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
sscanf (str, "%s %d %[^\0]", message, &status, response);
有没有办法在没有strtok的情况下做到这一点?
答案 0 :(得分:6)
您可以将扫描集用于unsigned char
类型的整个范围:
char message[MESSAGE_SIZE], response[RESPONSE_SIZE];
int status;
*response = '\0';
sscanf(str, "%s %d %[\001-\377]", message, &status, response);
另外,您应该始终检查sscanf
的返回值。如果数字后面只有空格,则第三个说明符将不匹配任何内容,sscanf
将返回2
,保持response
不变。
答案 1 :(得分:6)
%n说明符将捕获扫描中使用的字符数。这应该得到扫描第一个值然后从该索引strcpy使用的字符数。
int used;
sscanf (str, "%s %d %n", message, &status, &used);
strcpy ( response, &str[used]);