wool王 发表于 2006-1-13 14:52

转贴道面试题...大家用不同语言做做看...

面试失败,叫编一个程序,但在给定时间没编出来,那题目出来分享下,希望高手可以做出来
题目:
编写一程序输出一个由若干单词构成的字符串中的最长单词及其长度,若字符串中有多个单词满足条件须将这些单词全部输出。(注:程序书写要规范)
例:输入字符串为“The indictment said the defendants had collected geographical data indicating thousands of people would be killed in the chemical blast”
输出应为:
最长单词:geographical
单词长度:12

在CSDN的java版转来的...大家看看...

hjack 发表于 2006-1-13 16:30


package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test1 {

        private int length;
        private String[] s;
        private List list;
       
        public void find(String str){
                length = 0;
                s = str.split(" ");
                list = new ArrayList();
                for ( int i=0; i < s.length; i++ ){
                        if( s.length() > length ){
                                length = s.length();
                                list.clear();
                                list.add(s);
                        }
                        else if( s.length() == length ){
                                length = s.length();
                                list.add(s);
                        }
                }
        }
       
        public void print(){
                Iterator itor = list.iterator();
                while( itor.hasNext() ){
                        String s = (String)itor.next();
                        System.out.println("最长单词:"+s);
                        System.out.println("单词长度:"+length);
                }
               
        }
        /**
       * @param args
       */
        public static void main(String[] args) {
                // TODO 自动生成方法存根
                Test1 app = new Test1();
                app.find("a bb cses s fess");
                app.print();
        }

}

java写的一个.

[ 本帖最后由 hjack 于 2006-1-13 16:32 编辑 ]

wool王 发表于 2006-1-13 18:41

package test;

public class CountString {

        private static String find(String s) {
                String newString[] = s.split(" ");
                int maxLength = 0;
                String maxLengthString = null;
                for (int i = 0; i < newString.length; i++) {
                        if (newString.length() > maxLength) {
                                maxLength = newString.length();
                                maxLengthString = newString;
                        }
                }

                return maxLengthString + "," + maxLength;
        }

        private static void print(String s) {
                String newString[] = s.split(",");
                System.out.println("最长单词:" + newString);
                System.out.println("单词长度:" + newString);
        }

        public static void main(String[] args) {
                String s = "The indictment said the defendants had collected geographical data indicating thousands of people would be killed in the chemical blast";
                print(find(s));
                return;
        }
}


...被先贴出来了...我这个没用collection接口...

powerwind 发表于 2006-1-13 23:50

这是用JAVASCRIPT来写的

<html><head>
<SCRIPT LANGUAGE="JavaScript">
<!--
function f()
{
        var str=document.all.text1.value;
        document.all.text2.value="";
        var s=str.split(" ");
        var len=s.length;
        var t=s;
        for(i=0;i<len;i++)if(t.length<s.length)t=s;
        var L=t.length;
        document.all.text2.value+="最长单词是: ";
        //题目没说相同单词不要重复输出,所以省事一些
        for(i=0;i<len;i++){
                if(s.length==L)
                document.all.text2.value+=s+" ";
                }
        document.all.text2.value+=" 单词长度为:"+L;
}
//-->
</SCRIPT>
</head>
<body><center>
<textarea cols="100" rows="10" id="text1">The indictment said the defendants had collected geographical data indicating thousands of people would be killed in the chemical blast</textarea>
<textarea cols="100" rows="10" id="text2"></textarea><br>
<input type="button" value="OK" onclick="f()">
</center>
</body>
</html>

黯然销魂 发表于 2006-1-16 16:25


//Flash ActionScript 1.0
var temp=0;
var str = "The indictment said the defendants had collected geographical data indicating thousands of people would be killed in the chemical blast";
var breakStr = new Array();//to store the word
var longWord = new Array();//to store the longest word
breakStr=str.split(" "); //break the string
for(var i=0;i<breakStr.length;i++){
        if(breakStr.length>temp){
                longWord=new Array();
                longWord.push(breakStr);
                temp=breakStr.length;
        }else if(breakStr.length==temp){
                longWord.push(breakStr);
        }
}
trace(temp);
trace(longWord);



//Flash ActionScript 2.0
var temp:Number = 0;
var str:String = "The indictment said the defendants had collected geographical data indicating thousands of people would be killed in the chemical blast";
var breakStr:Array = new Array(); //to store the word
var longWord:Array = new Array(); //to store the longest word
breakStr = str.split(" "); //break the string
for (var i:Number = 0; i<breakStr.length; i++) {
        if (breakStr.length>temp) {
                longWord = new Array();
                longWord.push(breakStr);
                temp = breakStr.length;
        } else if (breakStr.length == temp) {
                longWord.push(breakStr);
        }
}
trace(temp);
trace(longWord);



OUTPUT:
12
geographical


[ 本帖最后由 黯然销魂 于 2006-1-16 17:34 编辑 ]

雪糕 发表于 2006-1-16 22:50

记得以前考二级C语言的上机题目中背过类似题目,用指针。。。。

hansen 发表于 2006-1-16 23:20

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

class CMaxSubStrs
{
public:

        CMaxSubStrs(const string& rStr);
        void PrintMaxSubStrs();

private:

        void GetMaxSubStrs(const string& rStr);

private:
        vector<string> mVecMaxStrs;
        int mMaxLen;

};

CMaxSubStrs::CMaxSubStrs(const string& rStr)
{
        mMaxLen = 0;
        GetMaxSubStrs(rStr);
}

void CMaxSubStrs::GetMaxSubStrs(const string& rStr)
{
        string                subStr;

        //利用string流分割字符串
        istringstream input_string(rStr.c_str());
       
        while(!input_string.eof())
        {
                input_string>>subStr;

                //如果遇到更大的子串则清空容器,容器存放新的最大子串
                if(mMaxLen < subStr.length())
                {
                        //记录最大子串长度
                        mMaxLen = subStr.length();
                        mVecMaxStrs.clear();
                        mVecMaxStrs.push_back(subStr);
                }
                else if(mMaxLen == subStr.length())
                {
                        mVecMaxStrs.push_back(subStr);
                }
        }
}

void CMaxSubStrs::PrintMaxSubStrs()
{
        vector<string>::iterator iter;
        vector<string>::iterator endIter = mVecMaxStrs.end();
        for(iter=mVecMaxStrs.begin(); iter!=endIter; iter++)
        {
                cout<<(*iter)<<endl;
        }

        cout<<"len:"<<mMaxLen<<endl;

}

int main(int argc, char* argv[])
{
        CMaxSubStrs test("The indictment said the defendants had "
                                        "collected geographical data indicating "
                                        "thousands of people would be killed in "
                                        "the chemical blast");
        test.PrintMaxSubStrs();

        return 0;
}

小棠菜 发表于 2006-1-17 14:52

好变态吖~~~~
望住D甘长嘅程序就想晕.........

小康 发表于 2006-1-24 19:35

手痒,直接打入一个试试,没有输出最长的字符串
int maxlen(char *word)
{
int len;
len=0;
while(*word)
{
    if(word==' ')
      len=0;
   else
   len++;
    word++;
}
return len;
}

小康 发表于 2006-1-24 19:44

int maxlen(char *word)
{
int len;
len=0;
while(*word)
{
    if(*word==' ')
      len=0;
   else
   len++;
    word++;
}
return len;
}
void xixi(char *word)
{
int len,i,j,index;
len=maxlen(word);
index=0;i=j=0;
while(word)
{
    if(word==' ')
      index=i+1;
    else
   j++;
   if(j==len)
   {
      while(word!=' ') printf("%c",word);
      printf("\n");
      j=0;
   } //if
   word++;
} //while
}

//没有调试过,仅供参考

Switch 发表于 2006-1-26 12:49

应该可以直接扫描。。

iptton 发表于 2006-1-30 02:08

强。。。。。。。。。。。。。。。。。

大鱼 发表于 2006-2-21 11:12

第三楼wool王 (Woden) 的程序有问题吧?
                for (int i = 0; i < newString.length; i++) {
                        if (newString.length() > maxLength) {
                              maxLength = newString.length();
                              maxLengthString = newString;
                        }
                }
感觉这部分是错误的。
               for (int i = 0; i < newString.length; i++) {
                     if (newString.length() = maxLength) {
                              maxLengthString =maxLengthString +"," +newString;
                        }
                        if (newString.length() > maxLength) {
                              maxLength = newString.length();
                              maxLengthString = newString;
                        }

                }

在最后输出时,再用SPLIT进行分解并输出

[ 本帖最后由 大鱼 于 2006-2-21 14:01 编辑 ]

大鱼 发表于 2006-2-21 14:02

<%
if request.QueryString("action")="n" then
i_strr=request.Form("str_n")
shuchu(i_strr)
end if

function shuchu(i_str)
dim array_list,lenght_max
array_list=split(i_str," ")
lenght_max=0
str_max=""
for i=0 to ubound(array_list)
if len(array_list(i))=lenght_max then
   str_max=str_max&","&array_list(i)
end if
if len(array_list(i))>lenght_max then
   str_max=array_list(i)
       lenght_max=len(array_list(i))
end if
next

response.Write("最长单词:")
response.Write(str_max)
response.Write("<br>长度为:")
response.Write(lenght_max)
end function
%>
<html>
<title>
测试页面
</title>
<body>
<form action="?action=n" method="post" name="dd">
<input type="text" name="str_n" size="30" value="dddd kkkk bbb dddd">
<input type="submit" value="提交">
</form>
</body>
</html>

大鱼 发表于 2006-2-21 14:41

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace yong
{
        /// <summary>
        /// test 的摘要说明。
        /// </summary>
        public class test : System.Web.UI.Page
        {
                protected System.Web.UI.WebControls.TextBox TextBox1;
                protected System.Web.UI.WebControls.Label Label1;
                protected System.Web.UI.WebControls.Button Button1;
       
                private void Page_Load(object sender, System.EventArgs e)
                {
                        // 在此处放置用户代码以初始化页面
                }

                #region Web 窗体设计器生成的代码
                override protected void OnInit(EventArgs e)
                {
                        //
                        // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                        //
                        InitializeComponent();
                        base.OnInit(e);
                }
               
                /// <summary>
                /// 设计器支持所需的方法 - 不要使用代码编辑器修改
                /// 此方法的内容。
                /// </summary>
                private void InitializeComponent()
                {   
                        this.Button1.Click += new System.EventHandler(this.Button1_Click);
                        this.Load += new System.EventHandler(this.Page_Load);

                }
                #endregion

                private void Button1_Click(object sender, System.EventArgs e)
                {
                        string i_str=TextBox1.Text.ToString();
                        string s_char=" ";
                        string[] str_i=i_str.Split(s_char.ToCharArray());
                        int lenght_max=0;
                        string str_max="";
                        for (int i=0;i<str_i.Length;i++)
                        {
                                if(str_i.Length==lenght_max)
                                {
                     str_max=str_max+","+str_i.ToString();
                                }
                                if(str_i.Length>lenght_max)
                                {
                                        str_max=str_i.ToString();
                                        lenght_max=str_i.Length;
                                }                       
                        }
                       
          Label1.Text="最长的字符为:"+str_max.ToString()+"<br>"+"长度为:"+lenght_max.ToString();
                }        }
}

到底还是。NET写程序舒服,一个字。爽!比JAVA和ASP等好用多了。

[ 本帖最后由 大鱼 于 2006-2-21 14:46 编辑 ]

wool王 发表于 2006-2-22 12:30

呵呵.c#确实是优美的语言.java的优势在于思想.

大鱼 发表于 2006-2-22 13:37

赞同楼上的说法。支持!
页: [1]
查看完整版本: 转贴道面试题...大家用不同语言做做看...