【问题标题】:Function to create an identifier-like string out of one or two string in C用C中的一个或两个字符串创建一个类似标识符的字符串的函数
【发布时间】:2012-01-03 11:05:50
【问题描述】:

我想知道C中是否有一个函数可以从一个字符串(“name”)或两个字符串(“name”,“surname”)通过传递论据。

关键是我想创建一个带有伪姓氏的帐户。 有什么想法可以帮助我吗?

如果没有执行此操作的功能,我想知道执行此操作的更好方法。谢谢。

【问题讨论】:

  • 这是用于代码生成的?
  • 其实是用来创建账号的。例如,我的名字是 Michele Campus,我有 2 个 char* name="michele", surname="campus"。我想生成一个 3rd char* 帐户,其中包含姓名和姓氏的伪随机组合(例如 m_campus 或 mcampus 或任何你想要的)。
  • 但是账户名和C变量名有什么关系呢?
  • 好吧,可能我解释的不是很好。但重点是我在上面的评论中写的。
  • @Kyrol:所以你想用一个或多个字符串创建一个类似标识符的字符串?您能否相应地改写您的问题?

标签: c string function pointers


【解决方案1】:

变量名是在编译时定义的。您不能动态生成变量名并引用它。如果你想实现类似的东西,你可以实现一个 Map,其中的键是一个带有你的变量名的字符串。

代码可能是这样的:

//take a name and create a new entry in the map holding value of the given size
void create_variable_entry(char * name, void * value, int size);

//return a pointer to a previous inserted variable with name name. return NULL if variable doesn't exist
void * get_variable(char * name);

【讨论】:

    【解决方案2】:

    您必须编写自己的函数。遍历字符串中的所有字符并从中构建一个变量名。如果字符是字母数字或下划线,您可以保留它,否则您将不得不选择替换字符。 C中的变量必须以下划线或字母开头,必须处理字符串开头的数字。

    棘手的问题是该方案可能会为相同的字符串产生重复的变量名称(转换很可能是满射的,而不是双射的)。所以通常会有一些映射表来跟踪并选择一些额外的字符来区分这些重复项。

    【讨论】:

    • 传入的字符串只有在运行时才知道,而变量需要在编译前创建,如何在运行时创建变量?
    【解决方案3】:

    C 语言规范不提供任何函数来根据输入字符串创建/生成变量名称。

    但你可以写一个!

    【讨论】:

      【解决方案4】:

      这没有任何意义,变量名只是为了编写代码和识别编译器的特定事物。一旦你的代码被编译,变量名就没有任何意义(除了当你在调试并且你在你的二进制文件中嵌入了调试符号时)。所以不,没有函数。

      如果您希望能够使用用户指定的“名称”查找项目,那么也许某种 ma​​p/dictionary 结构会乐于助人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多