2017-04-27 61 views
-1

說我有一個是在一些文件寫成04251993一個生日修改舊的字符串轉換成一個新的字符串從文件

我想把它格式化爲04/25/1993

我假設我應該創建一個空字符串,或將舊字符串修改爲新字符串。

我不太清楚如何做到這一點:在編寫函數時需要一些幫助。 我是這樣開始的。

前兩個字符需要以斜線後的月份,另外2個字符後面是斜線,然後是最後4個字符以顯示一年。

void timef(char str[]){ 
printf("%c, str[0]) ? 
+2

嘛,你嘗試過什麼?爲什麼不'char newdate [11] =「」;'保存新的日期。你可以很容易地選擇月份,日期,年份,並用'strncpy(newdate,olddate,2);'newdate [2] ='/';','strncpy(newdate + 3,olddate + 3,2);''newdate [5] ='/';'最後'strncpy(newdate +,olddate + 4,4);'試試並回報。 –

回答

0

在堆上設置足夠大的字符數組。然後通過 字符並插入斜槓。使用fputs將它放在一個文件中。重複。

0

您可以編寫一個通用函數,也可以編寫一個只在集合邊界內執行操作的函數。對於這個答案,讓我們來研究後者。這意味着,我假設你的字符串總是固定的9個字符(包括'\ 0'),並且數據的包裝是「mm/dd/yyyy」。 從那裏,你只需要計算出新字符串需要多大,這就是originalString + 2個字符,所以你需要一個新的11個字符數組。

char newDate[11] = ""; 

然後你通過原始字符串數組的內容需要循環和每個字符放入新的數組,以及你去添加斜線。所以像這樣:

int main() 
{ 
    int newSize = 11; 
    char oldDate[9] = "04231993"; 
    char newDate[11] = ""; 

    for(int i = 0, j = 0; i < newSize && j < oldSize; i++, j++){ 
    if(i == 2){ 
     newDate[i] = '/'; 
     i++; 
     } 
    if(i == 5){ 
     newDate[i] = '/'; 
     i++; 
    } 
    newDate[i] = oldDate[j]; 
    } 
    printf("%s", newDate); 
} 

這真的很簡單,只是爲了說明基本概念。我會建議您開發自己的,更強大的版本。

+0

我現在修復了它,謝謝@BLUEPIXY – nfproductions

0

使用"%.*s"掃描原始字符串,然後寫入到一個新的

const char *src = "04251993"; 
char dest[11]; 
if (strlen(src) >= 8) { 
    sprintf(dest, "%.2s/%.2s/%.4s", src, src + 2, src + 4); 
} 
+0

@BLUEPIXY嗯我在看到你幾乎相同的[代碼]之前寫了這個(http://stackoverflow.com/questions/43647419/modify-an-old-string-into- an-new-string-from-a-file/43647679#comment74343123_43647419) – chux

+0

@BLUEPIXY你誤解了。我不是在抱怨,我補充了你,因爲我們都獨立地做出了類似的 - 很好的代碼。我不希望你認爲我發佈了你的想法沒有記入你。 – chux