2016-03-03 68 views
-1

給定一個字符串「紅色,黃色,藍色,綠色」我需要編寫一個函數,創建一個數組與顏色作爲元素。我無法找到有關此問題的信息,因爲我不允許使用strtok或string.h中的任何字符串操作函數。有什麼建議麼?函數創建一個字符串在C中的數組沒有strtok

這裏是我的代碼:

int findLength(char string[]){ 
    int l =0; 

    for(l = 0; string[l]!='\0'; l++){ 

    } 
    return l; 
}; 


char *stringToArray(char string[]){ 
    int i = 0; 
    int j = 0; 
    char c = ','; 
    int n = 0; 
    int l = findLength(string); 

    char *str = (char *)malloc(l * sizeof(char)); 

    while(string[i] != '\0'){ 
     if(string[i] == c){ 
      for(n = j; n < i; n++){ 
       str[j++] += string[n]; 
      } 

     } 
     i++; 
    } 
    printf("%s\n", str); 
    str = '\0'; 
    return str; 
} 


int main(int argc, const char * argv[]) { 

    char *string = "red, blue, green,"; 
    char *str = stringToArray(string); 
    free(str); 

    return 0; 

} 
+0

你有一個specfic問題[你以前的問題](http://stackoverflow.com/questions/35756596/how-to-create-a-string-from-an-array-of-strings-c) ? –

+1

到目前爲止你的代碼是什麼? – bruceg

+1

@bruceg我剛剛更新了我的代碼。 –

回答

1

可以遍歷您的字符串這樣你會發現你的字符串的長度後:

for(int i=1; i<size; ++i) 

然後你檢查當前的字符是字母和以前是一個空間:

if(string[i] >= 97 && string[i] <= 122 && string[i-1] == ' ') //assuming your string has only lower case letters 

然後你應該實現一個while循環,循環直到找到另一個空格或逗號,並將所有內容放入你的新數組中。

請記住,您的第一個詞是一個特例,因爲它之前沒有任何空格。

+0

'string.length'?請使用「a」和「z」代替幻數。 –

+0

你是對的我忘了他不應該使用字符串相關的方法。我現在就改變它。 – ScArL3T

+1

C中有*沒有字符串相關的方法,是我的觀點。 –

2

循環訪問字符串,直到找到一個逗號。然後將從開始到該點的所有內容複製到數組中的單獨字符串中。

繼續迭代,直到找到另一個逗號,然後將所有內容從您從原來的位置複製到您現在位於數組中另一個字符串的位置。

重複,直到到達字符串末尾。此外,確保在找到每個逗號後跳過任何空格。

+0

謝謝你的幫助 –

0

[..]與顏色元素的數組[..]

這將是字符的數組的數組。或者,因爲你不知道的大小既不陣列的單陣列,也不是數組,你使用指針:

char ** parts; // a pointer to a(n array of) pointer(s) to a(n array of) char(s) 

您需要分配一些空間爲parts第一個元素:

parts = malloc(sizeof(*parts) * 1); // Space for one pointer, to start with 

現在,您用一些指針(point)迭代您的輸入字符串(string =指向字符數組的最後一個字符的值爲'\0'的指針)。記住一個起始位置(使用指針start之前的一個位置您的輸入字符串的第一個字符。 在迭代過程中,如果找到一個分隔字符(例如','),則計算startpoint指針之間的字符數。如果是大於0,則分配內存爲數字+ 1個字符,結果指針分配到的parts最後一個元素:

// example for the first iteration, you need to change that 0 
parts[0] = malloc(numberOfCharacters + 1); 

最後,複製startpoint之間的一切成新分配的內存。 strncpy在這裏會有所幫助(如果你不允許使用它,那就給自己寫個替代品吧。不是把這個邏輯放到你的標記函數中)。

start設置爲point

如果您不是輸入結束,請在parts獲取更多空間來存儲更多指針:可以使用realloc完成此操作。然後返回迭代,直到找到一個分隔字符(或字符串的末尾)。

一定要檢查(重新)分配。請仔細閱讀上述功能的參賽作品(例如:http://en.cppreference.com/w/c

+0

非常感謝您的幫助 –

相關問題