【问题标题】:Obtaining two strings from a instruction从指令中获取两个字符串
【发布时间】:2013-11-16 14:10:11
【问题描述】:

我正在做一项工作,暗示使用指令在文件中执行某些操作,这些操作将从存档中读取,或者将通过输入给出。

正是我的问题涉及输入给出的指令的操作。

假设我给我的程序以下指令

select 7
insert "foo foo"
delete 8

在下面显示的代码中,我将在一个字符串中得到完整指令(如上所示):

char input[256];
int i;

printf("Insert an instruction: ");
fgets(input, 256, stdin);

/* Newline removal */
for(i = strlen(input)-1; i && input[i] < ' '; i--)
input[i] = 0;  

现在,如您所见,说明分为两部分首先是要执行的操作。举个例子,动作如下:

select
insert
delete

然后是将伴随该指令的数字或字符串。在给出的示例中:

7
"foo foo"
8

所以,基本上,我有完整的指令,但我希望该指令包含在两个单独的字符串中,这样我可以更好地使用它们。

我该怎么做?我需要以其他方式输入,还是拆分字符串?或者我需要两个以上的字符串来应对这种情况?

【问题讨论】:

  • 您是想自己用自己的循环来做这件事,还是想知道应该如何使用标准库函数(甚至是正则表达式库或像 弯曲)?
  • 我认为第二个选项没有太多必要(目前)。

标签: c string input


【解决方案1】:

最好 strdup() 你的输入,然后你可以分成两个单独的字符串。如果您不担心修改输入,那么您不必 strdup 它,但在我看来这是一个很好的做法。

#include    <string.h>

int main() 
{
char *p ;
char *cmd ;
char *arg ;

char input[256] ;

strcpy(input,"command  argument") ;

char *t = strdup(input) ;  /* if you cannot modify the input */

p = cmd = t ;
while (*p != ' ' && *p != 0 && *p != '\n') p++ ;
*p++ = 0 ;
while (*p == ' ') p++ ;
arg = p ;

return 0 ;
}

【讨论】:

  • 测试代码(在printf()s 的帮助下)我正在寻找该操作未存储。数字/字符串(即使有空格)已完全存储。
  • 道歉。我会修复它
  • 抱歉有点草率
  • 我找到了命令字符串的位置。为了处理它,我创建了一个 char 变量来复制它。我还为参数创建了一个 char 变量。我不认为第二个辅助变量真的很有必要,但它有助于澄清参数字符串的位置。
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2015-11-03
  • 2023-01-02
相关资源
最近更新 更多