各路神仙,给我指点一二吧,C++字符串处理问题
有这样一个字符串:
20120702172341.0Z;HeChi1_MX3-1 Abis TP 58[_1-3,6,1];minor (3);communicationsAlarm;M3100-farEndReceiverFailure;BSC-TRANS [101] RAI [5],181454;();();((Alcatel Additional Information,significant, Additional Information is ),(Alcatel Additional Information,significant,-- OMC3 ALARM --),(urlAddressOnAlarmDictionary,significant,https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=181454,101005));1;unAcknowledged (0);cleared (1);20120702172341.2Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#14/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#58;1;
现在需要用分号把Chi1_MX3-1 Abis TP 58[_1-3,6,1];给匹配出来。请哪位帮我写一个完整的程序出来,要求程序不能出现任何空指针等一系列任何异常,非常非常感谢
[解决办法]
这叫神马需求, 第一个分号和第二个分号之间不就是嘛.
[解决办法]
代码参考:
#include <iostream>#include <string>using namespace std;void main(){ string str = "20120702172341.0Z;HeChi1_MX3-1 Abis TP 58[_1-3,6,1];minor (3);" "communicationsAlarm;M3100-farEndReceiverFailure;BSC-TRANS [101] " "RAI [5],181454;();();((Alcatel Additional Information,significant, " "Additional Information is ),(Alcatel Additional Information," "significant,-- OMC3 ALARM --),(urlAddressOnAlarmDictionary," "significant,https://gxsesn045:7443helpd/cgi-bin/alarm_searc" "h.cgi?specific_problem=181454,101005));1;unAcknowledged (0)" ";cleared (1);20120702172341.2Z;;1.3.12.2.1006.53.1.2.0.3.101" "4;0.0.13.3100.0.7.68#14/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#58;1;"; size_t pos = str.find_first_of(";"); str = str.substr(pos + 1); pos = str.find_first_of(";"); str = str.substr(0, pos); cout << str << endl;}
[解决办法]
[User:root Time:00:00:17 Path:/home/liangdong/c]$ ./output HeChi1_MX3-1 Abis TP 58[_1-3,6,1][User:root Time:00:00:18 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* const argv[]) { const char *str = "20120702172341.0Z;HeChi1_MX3-1 Abis TP 58[_1-3,6,1];minor (3);communicationsAlarm;M3100-farEndReceiverFailure;BSC-TRANS [101] RAI [5],181454;();();((Alcatel Additional Information,significant, Additional Information is ),(Alcatel Additional Information,significant,-- OMC3 ALARM --),(urlAddressOnAlarmDictionary,significant,https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=181454,101005));1;unAcknowledged (0);cleared (1);20120702172341.2Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#14/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#58;1;"; int i; const char* ndx[3] = {str}; for (i = 1; i != 3; ++ i) { if (ndx[i - 1]) { ndx[i] = strchr(ndx[i - 1] + 1, ';'); } else { ndx[i] = NULL; } } if (ndx[1]) { if (ndx[2]) { printf("%.*s\n", ndx[2] - ndx[1] - 1, ndx[1] + 1); } else { printf("%s\n", ndx[1] + 1); } } else { printf("non match\n"); } return 0;}
[解决办法]
[User:root Time:00:04:45 Path:/home/liangdong/c]$ ./output HeChi1_MX3-1 Abis TP 58[_1-3,6,1][User:root Time:00:04:46 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* const argv[]) { const char *str = "20120702172341.0Z;HeChi1_MX3-1 Abis TP 58[_1-3,6,1];minor (3);communicationsAlarm;M3100-farEndReceiverFailure;BSC-TRANS [101] RAI [5],181454;();();((Alcatel Additional Information,significant, Additional Information is ),(Alcatel Additional Information,significant,-- OMC3 ALARM --),(urlAddressOnAlarmDictionary,significant,https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=181454,101005));1;unAcknowledged (0);cleared (1);20120702172341.2Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#14/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#58;1;"; char *dup = strdup(str); char *dup2 = dup; char *token; if ((token = strsep(&dup2, ";")) != NULL) { token = strsep(&dup2, ";"); if (token != NULL) { printf("%s\n", token); } } free(dup); return 0;}
[解决办法]
char *src_buf = "20120702172341.0Z;HeChi1_MX3-1 Abis TP 58[_1-3,6,1];minor (3);communicationsAlarm;M3100-farEndReceiverFailure;BSC-TRANS [101] RAI [5],181454;();();((Alcatel Additional Information,significant, Additional Information is ),(Alcatel Additional Information,significant,-- OMC3 ALARM --),(urlAddressOnAlarmDictionary,significant,https://gxsesn045:7443helpd/cgi-bin/alarm_search.cgi?specific_problem=181454,101005));1;unAcknowledged (0);cleared (1);20120702172341.2Z;;1.3.12.2.1006.53.1.2.0.3.1014;0.0.13.3100.0.7.68#14/0.0.13.3100.0.7.20#1/0.0.13.3100.0.7.48#58;1;"; char match_buf[100] = {0}; sscanf(src_buf,"%*[^;];%[^;]",match_buf);
[解决办法]