这是面试过程中遇到的几个问题,各位大侠帮忙答一下,谢了,注:最好用c#答,不要使用类库函数,用最优的办法:
1、Write a function given the head in a link list.
2.比较两个已排序(注意:是已排序的)字符串,相等返回TRUE,不相等返回FALSE;
3.输入一个字符串,判断它是否逆序输出与正序输出一致
4.你是否了解网络,对TCP/IP的理解
5.软件开发模型包含哪些内容
6.软件生存周期包含哪些内容,在各个生存周期中,需要产生的有关测试方面的制品有哪些?
7.链表的倒序

解决方案 »

  1.   

    // 2.比较两个已排序(注意:是已排序的)字符串,相等返回TRUE,不相等返回FALSE;
    // 比较两个已排序字符串是什么意思?是字符串里的每个字符已排序?这对比较没帮助。
    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;
    }
      

  2.   

    // 3.输入一个字符串,判断它是否逆序输出与正序输出一致using System;class Test
    {
      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
      }
    }
      

  3.   

    比较字符串??bool IsEqual(string s1, string s2)
    {
      return s1 == s2;
    }
      

  4.   

    谢谢各位的解答,但是注意:不能使用任何类库中的函数或属性,包括string.Length,还有str1==str2这样的形式,因为str1==str2的形式在framework中是进行了重载的,如果这么简单的话,就不作为面试题来出了。
    我这么得到字符串的长度:
    int i=0;
    while(str[i]!='\0\)
       i++;
    但是在c#中,这么写会报错,索引错误,但是在c中好像是可以的。那应该怎么得到呢?捕捉错误来实现还是怎么办?
      

  5.   

    我来帮你回答第2、3、7题,全部代码测试成功。
    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;
    }
     
    对于第一问,我不清楚题意是什么?
    还有的其他几个问题,心里明白,是靠背的,本人是最不喜欢背书的了。
      

  6.   

    str[i]!='\0\
    =====================================
    按你的说法,不能用“==”,那么“!=”就可以用了吗?
    到底什么可能什么不能用。
    真正编程的时候,有这样限制的吗?这样的面试题本身就有问题。如果他们请你了,在你工作时也不许用库函数?笑话。
      

  7.   

    !=可以用,是吧.
    那么这样行不:
    if(Srt1!=Srt2)
    {
      return false;
    }
    else
    {
      return true;
    }
    可以吗?真搞笑.
      

  8.   

    这样获得字符串长,算不算违规?
    private int Len(string a)
    {
    int i=0;
    char b;
    while(a!="")
    {
    try
    {
    b=a[i];
    i++;
    }
    catch
    {
    return i;
    }
    }
                return i;
    }
      

  9.   

    哦,忘了说一声,我面试的是测试工程师,所以不允许用库函数,但是普通的循环语句,或者比较什么的当然可以用,但是因为string的==是framework重载了的,所以不能用,要不然出题的意义就没了。
      

  10.   

    这些题表面上看起来并不难,用framework的类库统统解决了,但是什么都不让用就比较恶心了,唉,有些题目答出来了,但是感觉效果不好,所以来问问大家,看看大家的思路和理解。
    再瞧瞧还有别人怎么回答,明天结贴!
      

  11.   

    关于链表的问题,好象我的方法没有用库函数吧。不违规吧,楼主。
    测试工程师怎么出这些面试题,那个关于生命周期的还有点象,他应该出这样的题目呀:
    1、什么叫黑盒法测试,对于一个输入参数为字符串,输出结果也是字符串的过程,你打算用哪些样例来进行测试?
    2、int的取值范围是什么?对于一个输出结果为int或运算过程中用到int的类,你怎样判断在实际的应用中,是否会产生溢出错误,如果产生这样的错误,对程序和正常运会造成什么影响?如果我是面试官,考你这两题。
      

  12.   

    很EASY 的面试题,是哪个公司的让偶自信大增啊......
      

  13.   

    第二个面试题:
    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 ; 
    }
      

  14.   

    这些都是微软的题啊,说难不难,说简单吧,面试的时候真是不好答啊,基本上都是算法,软件工程,数据结构类的
    to:lgxysl(我心欲静),你的那个链表的那个应该是没错的吧,比较字符串的那个肯定是不对了。
    wuyi8808(c) copyleft 1985-2005  :) 的那个比较字符串正序逆序的,我也是这个思路,不知是否是正解。
    字符串比较的那个给出了是已经排序的条件,这个条件肯定是不能忽略的。
      

  15.   

    to: wuyi8808(c) copyleft 1985-2005  :) 你真厉害这个单词Palindrome
    都用上了英语六级了?
      

  16.   

    考算法就用C,一个String对象,你什么方法都不准用,神仙也做不出。[]是索引器、ToCharArray是方法、Length是属性,好吧都不用,你算给我看。
      

  17.   

    楼主:第一题是什么意思呀?我连题目都看不清楚,汗颜呀!请大家说说第一题是什么意思。
    对于第二题,只好用下面的方法了:
    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; }
    }
      

  18.   

    第一题:
    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();
    }
    }
    }