这道面试题我错在哪了?
韩雷 2005-10-14 02:14:12 前一段时间我去了一家公司面试,他们给我出了道题:
用户输入若干字符串,如果输入的是0000
表示结尾,对用户输入的字符串排序并输出到屏幕。
我的答案是:
(不好意思,有点长)
#include "stdafx.h"
using namespace std;
// 字符链表结构
struct char_struct
{
char a;
char_struct* next;
};
// 字符串链表结构
struct str_struct
{
char* str;
str_struct* next;
};
//----------------------------------------------
// main
//----------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
int j = 0;
int testforPaiXu = 0;
bool temp = false;
str_struct *str_head, *str_p, *str_q, *str_p_shang;
str_head = (str_struct*)malloc(sizeof(struct str_struct));
str_p = (str_struct*)malloc(sizeof(struct str_struct));
str_p_shang = (str_struct*)malloc(sizeof(struct str_struct)); // 排序时链表中上一个结构的暂存
str_head->next = str_p;
str_head->str = NULL;
str_p->next = NULL;
str_p->str = NULL;
char_struct* head, *p, *q, *temp_end;
temp_end = (char_struct*)malloc(sizeof(struct char_struct));
head = p = (char_struct*)malloc(sizeof(struct char_struct));
// while 1 begin
while(1)
{
str_p = str_head->next;
str_p_shang = str_head;
cout << " into please: ";
p = head;
head->a = getchar();
head->next = NULL;
//如果用户输入的第一个字母不是回车
if(head->a != '\n')
{
//while 2 begin
while(1)
{
q = (char_struct*)malloc(sizeof(struct char_struct));
q->a = getchar();
j++;
p->next = q;
p=q;
if(q->a == '\n')
break;
}
// while 2end
p->next = NULL;
cout << endl;
//将char_struct字符串链表内容装入一个char*
str_q = (str_struct*)malloc(sizeof(struct str_struct));
//malloc一个与刚输入的字符序列大小一致的char*空间
str_q->str = (char*)malloc((j+1)*sizeof(char));
memset(str_q->str,'\0',(j+1));//memset用来对一段内存空间全部设置为某个字符。
//为测试是否为结尾
temp_end = head;
//倒入
for(int k=0;k<j;k++)
{
str_q->str[k] = head->a;
head = head->next;
}
// 排序
if(temp == false)
{
str_head->next = str_q;
str_q->next = NULL;
}
// while 3 begin
while(temp)
{
//如果两个字符串的第testforPaiXu位相同
while(
(str_p->str[testforPaiXu] != '\0')
&& (str_q->str[testforPaiXu] != '\0')
&& str_p->str[testforPaiXu] == str_q->str[testforPaiXu]
)
{
testforPaiXu++;
}
if( str_p->str[testforPaiXu] < str_q->str[testforPaiXu])
{
if(str_p->next != NULL)
{
str_p_shang = str_p;
str_p = str_p->next;
}
else
{
//将 str_q 加在最后
str_p->next = str_q;
str_q->next = NULL;
temp = false;
}
}
else
{
str_p_shang->next = str_q;
str_q->next = str_p;
temp = false;
}
}
// while 3 end
temp = true;
testforPaiXu = 0;
j = 0;
while(temp_end->a == '0')
{
++i;
temp_end = temp_end->next;
}
if( (temp_end->a =='\n')
&& (i==4) ) break; // 输入的字符串为 "0000"
i = 0;
}
}
// while 1 end
str_head = str_head->next;
//输出
while(str_head != NULL)
{
cout << endl;
cout << str_head->str << endl;
str_head = str_head->next;
}
cout << endl;
return 0;
}
面试的人没说什么,让我回去等,结果我就等啊等...最后没结果:(
我把代码贴出来,请大家费心看看,错在那里?
谢谢