这是面试过程中遇到的几个问题,各位大侠帮忙答一下,谢了,注:最好用c#答,不要使用类库函数,用最优的办法:
1、Write a function given the head in a link list.
2.比较两个已排序(注意:是已排序的)字符串,相等返回TRUE,不相等返回FALSE;
3.输入一个字符串,判断它是否逆序输出与正序输出一致
4.你是否了解网络,对TCP/IP的理解
5.软件开发模型包含哪些内容
6.软件生存周期包含哪些内容,在各个生存周期中,需要产生的有关测试方面的制品有哪些?
7.链表的倒序
1、Write a function given the head in a link list.
2.比较两个已排序(注意:是已排序的)字符串,相等返回TRUE,不相等返回FALSE;
3.输入一个字符串,判断它是否逆序输出与正序输出一致
4.你是否了解网络,对TCP/IP的理解
5.软件开发模型包含哪些内容
6.软件生存周期包含哪些内容,在各个生存周期中,需要产生的有关测试方面的制品有哪些?
7.链表的倒序
// 比较两个已排序字符串是什么意思?是字符串里的每个字符已排序?这对比较没帮助。
bool CompareString(string s1, string s2)
{
// return s1 == s2; // 这样最简单了
if (s1.Length != s2.Length) return false;
for (int i = 0; i < s1.Length; i++)
{
if (s1[i] != s2[i]) return false;
}
return true;
}
{
static bool IsPalindrome(string s)
{
for (int i = 0; i < s.Length/2; i++)
{
if (s[i] != s[s.Length-i-1]) return false;
}
return true;
} static void Main()
{
Console.WriteLine(IsPalindrome("QWERTYTREWQ")); // true
Console.WriteLine(IsPalindrome("QWERTTREWQ")); // true
Console.WriteLine(IsPalindrome("QWERTUREWQ")); // false
Console.WriteLine(IsPalindrome("")); // true
}
}
{
return s1 == s2;
}
我这么得到字符串的长度:
int i=0;
while(str[i]!='\0\)
i++;
但是在c#中,这么写会报错,索引错误,但是在c中好像是可以的。那应该怎么得到呢?捕捉错误来实现还是怎么办?
private void button1_Click(object sender, System.EventArgs e)
{
//这是一个按钮事件,用来检测问题的答案是否正确
MessageBox.Show(Compare("abcdef4","abcdef").ToString());
//测试第2问,返回false
MessageBox.Show(TaaT("abcddcba").ToString());
//测试第3问,返回true Chain[] CData=new Chain[4];
CData[0].Data="a";
CData[1].Data="b";
CData[2].Data="c";
CData[3].Data="d";
CData[0].NID=2;
CData[1].NID=3;
CData[2].NID=1;
CData[3].NID=-1;
int P0=0;
//建立一个有4个元素的链表,首ID为0,末ID为-1 MessageBox.Show(ShowChain(CData,P0));
//输出链表,显示acbd,这是正确的 MessageBox.Show(ShowChain(ChainT(CData,ref P0),P0));
//调用ChainT倒序这个链表,然后调用ShowChain显示它,
//显示dbca,正确地倒序了
}
private bool Compare(string a,string b)
{
//第二问,这也太简单了吧,不知是不是这样
if(a==b)
{
return true;
}
else
{
return false;
}
} private bool TaaT(string a)
{
//第三问,判别字符串正序输出和倒序输入是否相同,也不复杂.
int la=a.Length;
string[] Ta=new string[la];
string aT="";
for(int i=0;i<la;i++)
{
Ta[i]=a.Substring(la-i-1,1);
}
aT=string.Join("",Ta);
if(a==aT)
{
return true;
}
else
{
return false;
} } private struct Chain
{
//定义一个结构,用于组织一个链表
public string Data;
public int NID;
} private Chain[] ChainT(Chain[] ChainData,ref int P0)
{
//最后一问,倒序链表
//-1表示不再指向任何后继元素
int Pn=P0;//下一级ID
int Px=P0;//本级ID
int Py=-1;//上一级ID
while(Px!=-1)
{
Pn=ChainData[Px].NID;//获得一下级ID
ChainData[Px].NID=Py;
//本级的下级变为上一级
//这样便实现倒序
Py=Px;//传递上一级ID
Px=Pn;//传递本级ID
}
ChainData[P0].NID=-1;
P0=Py;//传递首地址值
return ChainData;//返回链表
}
private string ShowChain(Chain[] ChainData,int P0)
{
//历遍链表,把所有值连成一个字符串以便显示观察
int Pn=P0;
string Ps="";
while(Pn!=-1)
{
Ps=Ps+ChainData[Pn].Data;
Pn=ChainData[Pn].NID;
}
return Ps;
}
对于第一问,我不清楚题意是什么?
还有的其他几个问题,心里明白,是靠背的,本人是最不喜欢背书的了。
=====================================
按你的说法,不能用“==”,那么“!=”就可以用了吗?
到底什么可能什么不能用。
真正编程的时候,有这样限制的吗?这样的面试题本身就有问题。如果他们请你了,在你工作时也不许用库函数?笑话。
那么这样行不:
if(Srt1!=Srt2)
{
return false;
}
else
{
return true;
}
可以吗?真搞笑.
private int Len(string a)
{
int i=0;
char b;
while(a!="")
{
try
{
b=a[i];
i++;
}
catch
{
return i;
}
}
return i;
}
再瞧瞧还有别人怎么回答,明天结贴!
测试工程师怎么出这些面试题,那个关于生命周期的还有点象,他应该出这样的题目呀:
1、什么叫黑盒法测试,对于一个输入参数为字符串,输出结果也是字符串的过程,你打算用哪些样例来进行测试?
2、int的取值范围是什么?对于一个输出结果为int或运算过程中用到int的类,你怎样判断在实际的应用中,是否会产生溢出错误,如果产生这样的错误,对程序和正常运会造成什么影响?如果我是面试官,考你这两题。
private bool Compare( string inStr1 , string inStr2 )
{
int _count1 = GetStrLengh( inStr1 ) ;
int _count2 = GetStrLengh( inStr2 ) ;
if ( _count1 != _count2 ) return false ;
bool _rtn = false ;
try
{
for( int i = 0 ; i < _count1 ; i++ )
{
if ( inStr1[i] != inStr2[i] )
return false ;
}
_rtn = true ;
}
catch
{
_rtn = false ;
}
return _rtn ;
} private int GetStrLengh( string inStr )
{
int _rtn = 0 ;
try
{
foreach( char _c in inStr )
{
if ( _c != '\0' )
_rtn++ ;
}
}
catch
{
_rtn = 0 ;
}
return _rtn ;
}
to:lgxysl(我心欲静),你的那个链表的那个应该是没错的吧,比较字符串的那个肯定是不对了。
wuyi8808(c) copyleft 1985-2005 :) 的那个比较字符串正序逆序的,我也是这个思路,不知是否是正解。
字符串比较的那个给出了是已经排序的条件,这个条件肯定是不能忽略的。
都用上了英语六级了?
对于第二题,只好用下面的方法了:
private int Len(string a)
{
int i=0;
char b;
while(a!="")
{
try
{
b=a[i];
i++;
}
catch
{
return i;
}
}
return i;
}
private bool Compare2(string a,string b)
{
int la=Len(a);
int lb=Len(b);
if(la!=lb)
{
return false;
}
else
{
for(int i=0;i<la;i++)
{
if(a[i]!=b[i])
{
return false;
}
}
return true; }
}
using System;namespace CS数据结构
{
/// <summary>
/// 结点类
/// 为方便起见,结点数据类型用int表示
/// </summary>
public class ListNode
{
public int data; //ElemType
public ListNode()
{
}
public ListNode next;
} /// <summary>
/// 链表类
/// </summary>
public class LinkList
{
private ListNode first; //第一个结点
public LinkList()
{
first = null;
} public bool IsEmpty()
{
return first == null;
} public int Length()
{
ListNode current = first;
int length = 0;
while(current != null)
{
length++;
current = current.next;
}
return length;
} /// <summary>
/// 返回第k个元素至x中
/// </summary>
/// <param name="k"></param>
/// <param name="x"></param>
/// <returns>如果不存在第k个元素则返回false,否则返回true</returns>
public bool Find( int k, ref int x )
{
if( k<1 )
return false;
ListNode current = first;
int index = 1;
while( index<k && current != null )
{
current = current.next;
index++;
}
if( current != null )
{
x = current.data;
return true;
}
return false;
} /// <summary>
/// 返回x所在的位置
/// </summary>
/// <param name="x"></param>
/// <returns>如果x不在表中则返回0</returns>
public int Search( int x )
{
ListNode current = first;
int index = 1;
while( current != null && current.data !=x )
{
current = current.next;
index++;
}
if(current != null)
return index;
return 0;
} /// <summary>
/// 删除第k个元素,并用x返回其值
/// </summary>
/// <param name="k"></param>
/// <param name="x"></param>
/// <returns></returns>
public LinkList Delete( int k, ref int x )
{
//如果不存在第k个元素则引发异常
if( k<1 || first == null )
throw( new OutOfBoundsException() );
ListNode pNode = first; //pNode将最终指向第k个结点
//将pNode移动至第k个元素,并从链表中删除该元素
if( k == 1 ) //pNode已经指向第k个元素
first = first.next; //删除之
else
{
//用qNode指向第k-1个元素
ListNode qNode = first;
for( int index=1; index< k-1 && qNode != null; index++ )
qNode = qNode.next;
if( qNode == null || qNode.next == null )
throw( new OutOfBoundsException() );//不存在第k个元素
pNode = qNode.next; //pNode指向第k个元素
qNode.next = pNode.next; //从链表中删除第k个元素
x = pNode.data;
}
return this;
} /// <summary>
/// 在第k个元素之后插入x
/// </summary>
/// <param name="k"></param>
/// <param name="x"></param>
/// <returns></returns>
public LinkList Insert( int k, int x )
{
//如果不存在第k个元素,则引发异常OutOfBoundsException
if( k<0 )
throw( new OutOfBoundsException() );
ListNode pNode = first; //pNode将最终指向第k个结点
for( int index = 1; index<k && pNode != null; index++ )
pNode = pNode.next;
if( k>0 && pNode == null )
throw( new OutOfBoundsException() );//不存在第k个元素
ListNode xNode = new ListNode();
xNode.data = x;
if( k>0 )
{
//在pNode之后插入
xNode.next = pNode.next;
pNode.next = xNode;
}
else
{
//作为第一个元素插入
xNode.next = first;
first = xNode;
}
return this;
} public void Clear()
{
first = null;
} public void OutPut()
{
ListNode current;
for( current = first; current != null; current = current.next )
{
Console.Write("{0}", current.data.ToString() );
} Console.WriteLine();
}
}
}