同学昨天去参加华为软件机试,一共三道题,难度依次递增,两个小时。第一题普遍很简单,基本都能写出来,第二题难度适中,相对费些时间,第三题一般情况下就不是我等非软件专业在规定时间内能驾驭的了的啦。废话不多说,发几道我同学记下的题,还有我自己敲的代码。
第一题(60分):
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
我写的代码如下:
#include <iostream>
void cut(int n,const char *input);
int main()
{
char str[20][20] = {"abc","1234567890"};
int n = 8; //设置截取长度
int m = 2; //设置字符串个数
for (int i = 0; i < m; i++) {
cut(n,str[i]);
}
return 0;
}
void cut(int n,const char *input){
char temp[100][100];
int i = 0,j = 0,k = 0;
if (strlen(input) <= n) //若字符串长度小于或者等于要求截取长度
{ //则依次将输入的字符串中的字符放入临时二维数组temp的第一行
for (i = 0; i < n; i ++) //并将大于n的地方补0
{
if (input[i] != '\0')
{
temp[j][k ++] = input[i];
}else
{
temp[j][k++] = '0';
}
}
}else //若字符串长度大于要求截取长度
{ //则当列数没到达n时,依次将输入中的字符放入temp第一行
for (i = 0; i < strlen(input); i++)
{
if ((i + 1) % n != 0)
{
temp[j][k++] = input[i];
}else
{
temp[j][k++] = input[i]; //当列数到达n时,依次将输入中的字符放入temp的下一行
k = 0;
j++;
}
}
while (k < n)
{
temp[j][k++] = '0'; //将最后一行剩下的元素补0
}
}
for (i = 0; i <=j; i++) {
temp[i][k] = '\0'; //