C++ 正则表达式 sscanf
C++ regular expression sscanf
我想使用 sscanf 提取字符串中的第 2 个整数(5 和 10)
RSSI = 5
误码率 = 10
像这样:
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
int main() {
std::string str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
unsigned char lBufRX[100];
char *rssi, *ber;
if((sscanf(str.c_str(), "%*[^:]: %s,%s[^\n]", rssi, ber)) != 2) {
std::cout <<"[" << rssi << "]" << "[" << ber << "]" << std::endl;
}
return 0;
}
结果很糟糕。谁能帮帮我?
我的输出是:“[5,10][”和“%*[^:]:”我一直读到第一个整数,所以“5”和“,%s[^\n]”我读了第二个整数所以 "10" 直到 \r\n
谢谢
您有几个错误。尽管您想阅读两个 int
,但您正在使用 char*
。但是你不会为它们分配内存。此外,您期待两次成功的解析,但请检查 != 2
。这是一些有效的代码:
int main() {
std::string str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
int rssi, ber;
if((sscanf(str.c_str(), "%*[^:]: %d,%d", &rssi, &ber)) == 2) {
std::cout <<"[" << rssi << "]" << "[" << ber << "]" << std::endl;
}
return 0;
}
我想使用 sscanf 提取字符串中的第 2 个整数(5 和 10) RSSI = 5 误码率 = 10 像这样:
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
int main() {
std::string str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
unsigned char lBufRX[100];
char *rssi, *ber;
if((sscanf(str.c_str(), "%*[^:]: %s,%s[^\n]", rssi, ber)) != 2) {
std::cout <<"[" << rssi << "]" << "[" << ber << "]" << std::endl;
}
return 0;
}
结果很糟糕。谁能帮帮我?
我的输出是:“[5,10][”和“%*[^:]:”我一直读到第一个整数,所以“5”和“,%s[^\n]”我读了第二个整数所以 "10" 直到 \r\n
谢谢
您有几个错误。尽管您想阅读两个 int
,但您正在使用 char*
。但是你不会为它们分配内存。此外,您期待两次成功的解析,但请检查 != 2
。这是一些有效的代码:
int main() {
std::string str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
int rssi, ber;
if((sscanf(str.c_str(), "%*[^:]: %d,%d", &rssi, &ber)) == 2) {
std::cout <<"[" << rssi << "]" << "[" << ber << "]" << std::endl;
}
return 0;
}