这是我尝试过的代码,
我必须从用户处获取一个字符串,并作为输出,我必须在偶数位置和奇数位置打印字符,并用空格隔开
我的问题: 在每个测试用例中,我都为结尾的两个字符串分配一个空字符,以得出我的字符串已结束的结论。假设我输入了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--;
}
}
答案 0 :(得分:5)
s1[strlen(s1)]='\0';
s2[strlen(s2)]='\0';
此行是错误的。替换为
s1[j]='\0';
s2[k]='\0';
这是因为strlen()
仅适用于在null
终止的字符串中检查null
。至此,您生成的字符串尚未null
终止。