在字符串中分别打印偶数个奇数字符

时间:2018-08-29 13:13:08

标签: c string

这是我尝试过的代码,

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

我的问题: 在每个测试用例中,我都为结尾的两个字符串分配一个空字符,以得出我的字符串已结束的结论。假设我输入了2个测试用例,现在如果输入比第一个测试用例小的字符串,结果是打印我的第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--;

   }
}

1 个答案:

答案 0 :(得分:5)

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

此行是错误的。替换为

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

这是因为strlen()仅适用于在null终止的字符串中检查null。至此,您生成的字符串尚未null终止。