【问题标题】:How to set up a C function that splits user input into multiple parts, and also splitting those smaller parts?如何设置一个 C 函数,将用户输入拆分为多个部分,并拆分这些较小的部分?
【发布时间】:2017-09-30 13:15:21
【问题描述】:

我正在尝试开发一个接受一行用户输入的 C 函数,例如这一行:

1X 1X 3Y 1Z 1Z 1Z 1Z 2X 2X

(编辑:这只是用户将输入的任意示例。在实际程序中,他们可以输入 1 到 48 个数字字符对之间的任何位置。)

这个想法是用户将插入这一整行,并将其分成 9 个部分(每个数字和字符对是一个部分)。然后,数字和字符对也将相互拆分(我正在考虑这部分,它们都属于包含 numValue 和 charValue 的结构)。

我可以使用什么来拆分用户的输入?我对 C 比较陌生。

【问题讨论】:

  • scanf() 会做到这一点,虽然我不太喜欢那个功能。读入整个字符串然后使用 sprintf() 也可以稍加小心。我会留给其他人填写详细信息。或者你可以直接谷歌这些函数然后从那里开始。
  • 欢迎来到 Stack Overflow。请尽快阅读About 和How to Ask 页面。 What have you tried?你为这个功能设想了什么样的界面?函数会分配内存还是用户会这样做?如果只有 8 个数字字符对会发生什么? 10个或更多?数字可以大于 9 吗?小于零?总是一个字母吗?它总是字母还是标点符号?如果您将98 作为一个字段,那么8 是字符吗?等等。
  • @MichaelDorgan:你说sprintf()——你是说sscanf()吗?如果你很快,你可以改变它。
  • 不够快 - 哈哈。但是,是的 - 就是这个想法。
  • @JonathanLeffler:谢谢。糟糕,9 位数字字符对只是一个例子。在该程序中,用户将能够输入任意数量的对,范围从 1 对到 48 对。 (我将对没有对的情况和超过 48 对的情况进行错误检查)。在读取用户的所有输入之前,该程序无法知道用户将输入多少对。至于用户输入格式错误的数据,我也会检查。我只允许每对一个数字和一个字符。读取数据时将忽略所有其他组合。

标签: c string input struct


【解决方案1】:

您可以用来从用户拆分输入字符串的函数是来自#include <string.h> 库的strtok()。下面是一个示例,您可以使用它来将输入分成九个部分。

#include <stdio.h>
#include <string.h>

main (){
    char word[] ="1X 1X 3Y 1Z 1Z 1Z 1Z 2X 2X";
    int i = 0;
    char *p = strtok(word, " ");
    char *array[9];

    while (p != NULL){
        array[i++] = p;
        p = strtok(NULL, " ");
    }
    return 0;
}

您可以再次执行此操作以进一步拆分它。为了解释strtok 的作用,我将用这段代码来解释:

strtok(word, " ");。 word 是要修改的字符串的内容," " 是字符串的分隔符。

【讨论】:

  • 谢谢。我认为代码可能会使用strtok 两次。我应该如何更改line 5 和line 8?用户将输入程序将读取的数字字符对。我想我可以将用户的整个输入读入一个字符数组吗?至于line 8:如何动态调整索引数?我的第一个例子措辞不当——正如我在上面的评论中所说,在实际程序中,用户决定他们想输入多少对。
  • @fallt_zz 当您向用户询问配对数并存储到像 i 这样的变量时,您将 char *array[9]; 设置为 char *array[i];
  • @fallt_zz 我讨厌这样做,但我很欣赏这个答案,然后接受答案
  • 我会接受这个答案。我希望我不必问用户他们将输入多少对。我希望它是动态的。
  • @fallt_zz 看看这个link 它应该可以解决你的问题
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多