我有以下字符串用C的sscanf從目錄路徑解析數
/foo123/bar123/card45/foofoo/1.3/
我想分析下面的字「卡」,這在上面的例子將是數45.應該我爲此使用sscanf,如果是這樣,我該如何去做呢?
感謝
我有以下字符串用C的sscanf從目錄路徑解析數
/foo123/bar123/card45/foofoo/1.3/
我想分析下面的字「卡」,這在上面的例子將是數45.應該我爲此使用sscanf,如果是這樣,我該如何去做呢?
感謝
我應該使用
sscanf
爲[XYZ問題]
號
但是你可以使用strstr
和strtol
代替:
const char *s = "/foo123/bar123/card45/foofoo/1.3/";
const char *p = "card";
const char *t = strstr(s, p);
int i = -1; // a negative number indicates a parse failure, for example
if (t != NULL) {
t += strlen(p);
char *end;
i = strtol(t, &end, 10);
if (!end || *end != '/') {
// parsing the number failed
}
}
使用strstr()
然後sscanf()
將完成這項工作。假設你有你的源字符串的字符數組中source_string
。然後使用此:
char * ptr;
ptr = strstr(source_string,"card");
sscanf (ptr,"%*s %d",&number); //Sorry this is wrong!!
sscanf(ptr,"card%d",&number); //This is right!!
sscanf(ptr,"%*4s%d",&number); //This works too
printf("The card number is %d",number);
strstr()
讓你在那裏「一卡通」 begins.Then你地址傳遞給sscanf()
爲source.The %*s
寫着「卡地址「,然後丟棄它。之後,%d
讀取」卡「後面的數字,並將其存儲在整數變量number
中,然後使用printf()
顯示。
這也適用。由於卡和號碼之間沒有空格,我只好將格式更改爲'%* [^ 0-9]%d'。 – user2077092 2013-04-30 18:32:51
@ user2077092我很抱歉,我的代碼中有一個愚蠢的錯誤,當我看到您的評論時,我即將改變。您會看到'%* s'將會讀取並忽略在「卡片」之後開始的所有內容。編輯。 – 2013-04-30 18:37:45
如何使用簡單的分割函數來切斷'/'路徑?
這裏是我用來按特定字母拆分隨機字符數組的函數。它將每個解析的部分保存到字符串向量中。
vector<string> split(const char *str, char c)
{
vector<string> result;
while(1)
{
const char *begin = str;
while(*str != c && *str)
str++;
result.push_back(string(begin, str));
if(0 == *str++)
break;
}
return result;
}
所以,你可以這樣調用
vector<string> ParsedString;
ParsedString = split("Your/Random/path", '/');
這個功能之後,你可以訪問到ParsedString的各項指標看任何人都有你正在尋找特定的詞。
或者,如果您要查找的單詞始終位於前面的第3或第4個單詞上,那麼您只能選擇該單詞進行搜索。
string InterestedTarget = ParsedString[4];
這個問題被標記爲「c」,而不是「C++」。 – 2013-04-30 18:25:32
謝謝..有效! – user2077092 2013-04-30 18:30:41