检查字符串是否存在于未初始化的字符串数组中

时间:2018-01-14 22:21:06

标签: c arrays string initialization exists

我有一个辅助函数,用于确定字符串数组中是否存在字符串:

bool exists_in(char *string, char *array[], int size){
    int i;
    for(i = 0; i < size; ++i){
        if(strcmp(string, array[i]) == 0)
            printf("%s\n", array[i]);
            return true;
    }
    return false;
}

基本上,我想在数组中放入一个元素(如果它还没有在那里)。如何使用未初始化为具有值的数组来执行此操作?

char *myArray[100] // initailize array

我想在myArray上调用exists_in(),但这会给我一个段错11,因为myArray中没有值。

2 个答案:

答案 0 :(得分:4)

如果您将数组从0填充到size,请使用size-1表示有效条目的数量。

如果数组未连续填充,或者您可能希望之后从中删除项目,请在每个元素中使用NULL初始化第一个“空”数组。 (如果稍后将其删除,请不要忘记将元素重置回NULL。)

然后在NULL

之前的循环中的strcmp上添加显式测试
char *myArray[100] = { NULL }; // initialize array with NULL
// (all elements will be initialized to 0 with this construction)

...

bool exists_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] && strcmp(string, array[i]) == 0)
        {
            printf("%s\n", array[i]);
            return true;
        }
    }
    return false;
}

答案 1 :(得分:0)

通过添加更多实用程序功能扩展已接受的答案

bool store_in(char *string, char *array[], size_t size);
bool delete_in(char *string, char *array[], size_t size);

和测试程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h> // bool C99

bool exists_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] && strcmp(string, array[i]) == 0)
        {
            printf("Exists:  %s\n", array[i]);
            return true; // exists
        }
    }
    return false;
}

bool store_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] == 0)
        {
            array[i] = string;

            printf("Storing: %s\n", array[i]);
            return true; // stored
        }
    }
    return false;
}

bool delete_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] && strcmp(string, array[i]) == 0)
        {
            printf("Delete:  %s\n", array[i]);
            array[i] = NULL;
            return true; // deleted
        }
    }
    return false;
}


int main()
{
    char *my_array[100] = { NULL }; // initialize array with NULL
    // (all elements will be initialized to 0 with this construction)    

   //1.
   if (! exists_in("123", my_array, 100) ) // Does not exists 
       store_in("123",my_array, 100);      // It will store 
   printf("\n");

   //2.      
   if (! exists_in("123", my_array, 100))  // Exists
       store_in("123",my_array, 100);      // It will not store 
   printf("\n");    

    //3.
   if (exists_in("123", my_array, 100))  
       delete_in("123",my_array, 100);     // It will delete
    printf("\n");   

    //4.   
    if (! exists_in("123", my_array, 100)) // Does not exists 
       store_in("123",my_array, 100);     // It will store

    return (0);
}

输出:

Storing: 123

Exists:  123

Exists:  123
Delete:  123

Storing: 123