回答
我會用的sscanf解析字符串:
int m, d, y;
sscanf("05/18/11", "%02d/%02d/%02d", &m, &d, &y);
這將解析日期爲三個整數值。
另外,要驗證輸入數據是否格式正確,還應該檢查sscanf是否返回3,表示所有三個值都已正確解析。請參閱以下working example,其中包括一些基本的錯誤檢查。
我就是這麼做的。 +1 – Swift 2011-05-19 01:47:09
您應該在鏈接代碼中包含錯誤檢查。 – 2011-05-19 01:50:20
@Fred:添加了一些關於錯誤檢查的進一步說明。 – 2011-05-19 01:58:23
#include <stdlib.h>
#include <string.h>
int main()
{
int month, day, year;
char mystr[10] = "05/18/11";
month = atoi(strtok(mystr, "/"));
day = atoi(strtok(NULL, "/"));
year = atoi(strtok(NULL, "/"));
return 0;
}
strtok()是一個函數,它首先調用一個字符串和一個分隔符來分割。在第一次調用之後,如果您將NULL作爲第一個參數傳遞,它將繼續標記相同的字符串。 atoi
將字符串轉換爲整數。
如果您的輸入非常嚴格,sscanf是好的。
請不要使用atoi解析用戶輸入。它無法檢測錯誤。 – 2011-05-19 01:51:56
首先,找到最近的'/'
:
int i;
char *d = date;
for(i = 0; date[i] != '/'; ++i);
然後申請一個 「子」:
strncpy(dd, date, i);
重複此過程:
d = date + i + 1;
for(; date[i] != '/'; ++i);
strncpy(mm, d, i - (d - date));
然後簡單地從過去的'/'
去到字符串的末尾:
d = date + i + 1;
strncpy(yy, d, strlen(date) - i);
OP問題的格式是'/'。如果它是\,那麼你將不得不使用'\\'。 \符號在C字符串中有特殊的含義。 – Lundin 2011-05-19 06:36:33
@downvoters我知道我有點晚了,但謹慎解釋downvote? (除了效率低於上述答案 - 我是一名C++程序員。) – 2011-07-21 05:21:43
'strtol(3)'可能是最好的功能。 – sarnold 2011-05-19 01:40:39