2017-04-23 70 views
-1

例如,是否可以使用字符串或字符来索引数组?

double myArray[3] = {0.0}; 

myArray["SSN_1"] = 2.0; 
myArray["SSN_2"] = 3.0; 
myArray["SSN_3"] = 2.0; 

for(... how? ...) 
{ 
... Print ... but, how? ... 
} 

如果您有任何引用,请链接。

+3

不,它不是...... – OldProgrammer

+2

随着4k代表,我会期待一个基本的搜索已成为您的第一个停靠港。 –

回答

2

不在这是不可能的,只允许整数。

关联容器可以用一个简单的结构来建立像

struct double_map_item { 
    char *key; 
    double value; 
}; 

看看bsearch()的手册页例如,对于一个简单的方法来找到通过自己的键值项。

当然,这是一个非常简单的可能的实现,您应该阅读有关哈希表的更完整和强大的实现。

关于this comment,在C字符常量的类型是int

array['x'] = value; 

是有效的,但要注意,这是不是真的有用,因为

  1. 您只能使用一个单个字符。
  2. 您可能会使用比所需大小的数组。
  3. 您只有一组非常有限的可能指数。

注意:以下your own comment,还有就是你看到的C++代码的机会。在C++中,可以重载[]运算符,以便它将const char *作为参数,然后使用散列表或任何其他方法为给定键找到匹配元素。

但是在c中,这是不可能的。

如果一个人实现在C++这样的容器,下面的例子说明如何进行,请注意,这只是对基本概念的说明,你应该使用std::map代替,

#include <iostream> 
#include <map> 

class Array { 
public: 
    Array(); 
    double operator[](const char *const key); 
    void insert(const char *const key, double value); 

private: 
    std::map<const char *, double> m_items; 
}; 

Array::Array() 
{ 
} 

double 
Array::operator[](const char *const key) 
{ 
    return m_items[key]; 
} 

void 
Array::insert(const char *const key, double value) 
{ 
    m_items.insert(std::pair<const char *, double>(key, value)); 
} 

int 
main(void) 
{ 
    Array items; 

    items.insert("SSN_1", 2.0); 
    items.insert("SSN_2", 3.0); 
    items.insert("SSN_3", 2.0); 

    std::cout << items["SSN_1"] << std::endl; 
    return 0; 
} 
+0

字符是一个整数类型,所以它们可以作为索引工作(虽然在大多数情况下不是非常有用)。 –

+0

我想我看到了某处,可能是字符串搜索算法的实现。 – anonymous

+0

但不是c,C++,因为你可以重载'[]'运算符。 –

相关问题