【发布时间】:2020-12-15 06:31:37
【问题描述】:
问题有两部分我不知道如何解决:
输入
用户可以输入一些输入,如12,14y 或15m,我需要提取两个整数和字符。现在,我只是使用:
char buffer[50];
scanf("%s", buffer);
switch (buffer[strlen(buffer)-1]) {
// ... I use this to read the last char
}
这可以给我我必须阅读多少个整数的信息:
-
m,n案例中的一个 ->sscanf(buffer, "%d%c", int1, c) -
y,s,b案例中的两个 ->sscanf(buffer, "%d,%d%c", int1, int2, c)
我需要这些数字作为我程序的核心,所以我不仅需要字符串,还需要 int 值。
问题是我在网上看到sscanf 效率低下,我需要一种快速完成这项任务的好方法。
输出
我的代码必须在一种情况下(y)修改这些数字,并保存用户输入的修改副本。例如,用户输入是1,12y,那么我必须在1,10y 中修改它并将其存储为一个字符数组,这样它就不仅仅是一个输入。 int2 的修改解释起来很长,我可以说新值会小于原始值(在我的示例中,从 12 得到 10)。我对此的唯一想法是如何创建新的 char 数组:我可以计算 int1 和 int2 长度,尝试将它们以 10 的递增幂除,直到得到 1 到 9 之间的结果。例如:
int1 = 201:
201 no
20.1 no
2.01 yes
=> 3 tries, length = 3
然后我使用 malloc。但是,我怎样才能在新的 char 数组中写入我的“输出”?例如:
input = "1,201y"
-> int1 = 1, int2 = 201
-> lenght(int1) = 1, length(int2) = 2
// if the core program sets int2 = 51, then
char *out = malloc(1+2+1):
// now I have to write "1,51y" in this char array
我已经编写了“核心”程序,但现在我想改进用户输入的快速“翻译”(因为在核心程序中我需要知道它是 int1m 还是 int1n 还是 int1,int2y或 int1,int2s 或 int1,int2b 命令),我不知道如何修改用户输入以将其保存在字符串中(对于字符串,我使用动态分配的 char 数组)。只有 y 命令可以修改 int2。
我希望清楚我要做什么。
【问题讨论】:
-
您需要更具体。预期的输入和输出是什么?
-
你说的字符是指字符数组吗?就像 int 到 string 一样?
-
你的问题很不清楚,也许你在找
sprintf? -
这是您的另一个问题的对应物(stackoverflow.com/questions/63586535/…),不是吗? IE。你想在这里做什么的输出是那个问题的输入?在那个问题中,事实证明阅读 scanf() 的文档非常有启发性。您是否阅读过有关 printf 和 sprintf() 的文档?
-
顺便说一句,这里的人们通常在看到在使用tour(您没有)并最好阅读How to Ask之后提出问题时,心情会更好,更有帮助。
标签: c performance type-conversion c11