首页 > 解决方案 > 在字符串中分别打印偶数奇数字符

问题描述

这是我尝试过的代码,

我必须从用户那里获取一个字符串,作为输出,我必须在偶数位置和用空格分隔的奇数位置打印字符

我的问题:在每个测试用例中,我都在结尾处为两个字符串分配了一个空字符,以得出我的字符串已经结束的结论。假设我输入了 2 个测试用例,现在如果输入一个比第一个测试用例小的字符串,它正在打印我的第二个测试用例的字符,但也打印测试用例的字符,因为第一个字符串大于第二个

我想问一下,如果我在每个测试用例中都以空字符结束字符串,怎么可能?

那么为什么它在空字符之后打印值,因为那是先前测试用例的字符,因为该字符串更大并且它的字符仍然存在于数组中但它应该打印到空字符请帮助我实现这一点。

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

int main() {
   int t,i,j,k;
   scanf("%d ",&t);
   while(t>0){
       char s[10000],s1[10000],s2[100000];
      scanf("%s",s);
       for( i=0,j=0,k=0;i<strlen(s);i++){
           if(i%2==0)
               s1[j++]=s[i];
           else
                s2[k++]=s[i];


       }
       s1[strlen(s1)]='\0';
       s2[strlen(s2)]='\0';
       printf("%s %s\n",s1,s2);
       t--;

   }
}

标签: cstring

解决方案


   s1[strlen(s1)]='\0';
   s2[strlen(s2)]='\0';

这条线是错误的。将其替换为

   s1[j]='\0';
   s2[k]='\0';

这是因为strlen()仅适用于签nullnull终止的字符串。此时您生成的字符串尚未null终止。


推荐阅读