#include
#include
#include <string.h>
using namespace std;
void str_bin(char s1[], char s2[]);
int main()
{
char s1[100];
char s2[100];
cin>>s1;
cin>>s2;
int m = strlen(s1);
int n = strlen(s2);
str_bin(s1, s2);
for( int i = 0; i < m + n - 1; i++)
{
for( int j = 0; j < m + n - 1 - i; j++)
{
if(s1[j] > s1[j + 1])
{
char temp = s1[j];
s1[j] = s1[j + 1];
s1[j + 1] = temp;
}
}
}
for( int i = 0; i < m + n; i++)
cout<<s1[i];
return 0;
}
void str_bin(char s1[], char s2[])
{
strcat(s1, s2);
}
为什么int m,n放在cin前面输出结果是不对的,必须放在后面呢?声明变量的顺序有什么要求吗?
与变量声明顺序无关,而是与cin和strlen的顺序有关,只有cin为s1和s2读取字符串后,m= strlen(s1)和n = strlen(s2)才不为0,后面for循环才能正常运行。如下即可,m,n声明在cin之前:
int m,n;
cin>>s1;
cin>>s2;
m = strlen(s1);
n = strlen(s2);
是这样的,如果你把 m 和 n 放到了两个数组前面,那么mn的值无法正确获取,此时数组里的值没有初始化,输出结果肯定很乱,建议现在上面定义m和n,等数组赋值过后,直接写m=strlen(s1) 等等
问题在于m是用strlen(s1)来赋的值,在cin之前,strlen(s1)等于0,而cin之后等于实际输入的字符串长度,所以运行结果不一样。声明只要在赋值或者使用之前就可以,而赋值的位置才是关键。