2016-03-03 67 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

非常感谢您的帮助 –

相关问题