【问题标题】:How to get specific adjacent characters of a string and add it to an another string in C如何获取字符串的特定相邻字符并将其添加到C中的另一个字符串
【发布时间】:2021-04-28 12:09:06
【问题描述】:

我有个抽象的概念就是用for循环来获取一个字符串的特定相邻字符并入栈,基本上就是把一个字符串表达式的所有常量单独入栈;例如字符串:“1111+(2222-3333)”将被放入堆栈,如“1111”、“2222”和“3333”。我在下面有一段代码从这个抽象概念开始,但首先尝试了一个简单的代码,不幸的是它没有输出复制特定相邻字符的预期结果。

char expression[20]={""},sub[20]={""};
    scanf("%[^\n]%*c",&expression);
    sub[15]=expression[15];
    sub[16]=expression[16];
    sub[17]=expression[17];
    sub[18]=expression[18];
    printf("%c %c %c %c\n",sub[15],sub[16],sub[17],sub[18]); //to check if copied successfully
    printf("sub= %s",sub); //doesnt print expected output

【问题讨论】:

  • 它输出什么?
  • @Das Falsche Gewinn 数组 sub 由零初始化。所以数组的第一个字符为零。调用 printf("sub= %s",sub); 不会输出任何内容因为该函数将决定数组包含一个空字符串。

标签: c printf c-strings


【解决方案1】:

在此声明之后

char expression[20]={""},sub[20]={""};

数组sub 的所有元素都包含零。

您从位置 15 开始更改了数组的元素

sub[15]=expression[15];
sub[16]=expression[16];
sub[17]=expression[17];
sub[18]=expression[18];

位置之前的元素仍然存储零。

所以printf的这个电话

printf("sub= %s",sub);

假设数组包含一个空字符串,因为它的第一个字符是终止零字符'\0'

你可以写

printf("sub= %s",sub + 15 );

或者你可以改变分配像

sub[0]=expression[15];
sub[1]=expression[16];
sub[2]=expression[17];
sub[3]=expression[18];

然后使用

printf("sub= %s",sub);

注意scanf这个调用的第二个参数

scanf("%[^\n]%*c",&expression);

不正确。你必须写

scanf("%[^\n]%*c",expression);

【讨论】:

  • @DasFalscheGewinn 完全没有。不客气。:)
猜你喜欢
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2012-08-28
  • 2017-12-24
  • 2020-04-13
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多