2012-12-03 123 views
1

char double[] = "1.2345678";,我不得不在這個char *之後.之後修剪第4位以上的所有數字。字符修剪結尾*

+1

請不要嘗試使用double作爲變量名稱。這是一個關鍵字! – anishsane

回答

2

一個顯而易見的解決方案是通過NUL替換字符,像這樣:

char *foo = strdup("1.2345678"); // FIXME: check return value 
foo[5] = '\0'; 

注意準確的位置可能會有所不同,depening在數字之前的多少出現「」字符。

遍歷字符串foo,如果你遇到改變狀態passed_dot,並插入一個NUL後4個字符「」:

char *p = foo; 
int i = 0; 
int passed_dot = 0; 
while (p && *p) { 
     if (*p == '.') passed_dot = 1; 
     if (passed_dot) i++; 
     if (i == 4) { 
       *p = '\0'; 
       break; 
     } 

     p++; 
} 

如果你不能買得起更多的內存,你可以strdup()生成的字符串和free()舊爲了節省內存:

new_str = strdup(foo); // and don't forget to check for NULL 
free(foo); 
+0

這很難看。你仍然有內存中的所有剩餘數字... –

+1

@Cobra_Fast:好提示!編輯我的答案。 – Philip

+0

請注意,OP沒有說他的字符串是動態分配的任何地方。它可能是一個堆棧緩衝區。在這種情況下,沒有明智的方式來重複使用內存來查看通過nul的字符。即使字符串是動態分配的,當您釋放原始內容時,動態分配替換內存時是否使用內存中的尖峯似乎是有問題的。 – simonc

3

找到'.',前進四步,並將字符串終止符放在那裏。

小心,所以你不要自己傳遞字符串終止符,如果該數字包含少於三個數字點後。

爲了幫助您找到點,請查閱strchr函數。

2

注意

char * double= "1.2345678"; 

聲明瞭一個字符串文字。這是常量,所以不能直接修改。爲了得到一個修改字符串,你可以聲明爲

char double[] = "1.2345678"; 

char* double = strdup("1.2345678"); 

然後插入一個空字符在其他的答案建議。