[编程题0][剑指offer]字符串最后一个单词的长度

原题地址:https://www.nowcoder.com/questionTerminal/8c949ea5f36f422594b306a2300315da
题意:计算字符串最后一个单词的长度,单词以空格隔开
输入描述:一行字符串,非空,长度小于5000
输出描述:整数N,表示最后一个单词的长度
示例:
输入:hello world
输出:5

整体思路:

将输入的字符串按空格分隔,找到最后一个求其大小。

实现1: @C++

1 #include <iostream>
 2 #include <sstream>
 3 #include <cstring>
 4 using namespace std;
 5 int main()
 6 {
 7     string inStr;
 8     int nLen = 0;
 9     getline(cin,inStr);
10     if(" "==inStr)
11         nLen = 0;
12     else{
13         istringstream is(inStr);  
14         string last;
15         while(is >> last) 
16             ;
17         nLen = last.size();
18     }
19     cout<<nLen<<endl;
20     return 0;
21 }

 

 

小结:

  • 采用getline()函数处理输入[参考http://blog.csdn.net/yelbosh/article/details/7483521,加以总结]
    • 功能:从流中读取文本,可以读取整行读取但不局限于此。读取方式有很多,如根据限定符、或已读取的字数等
    • C++中有两个getline()函数,
      • 定义在string头文件中,为全局函数,函数声明是istream& getline ( istream& is, string& str, char delim )和istream& getline ( istream& is, string& str )
      • 定义为istring的成员函数,数声明是istream& getline (char* s, streamsize n )与istream& getline (char*
        s, streamsize n, char delim );
  • 考虑特殊情况,即输入字符为空时,结果为0
  • 输入字符串流操作[参考http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html]
    • 功能:从流中提取数据,支持 >> 操作;可使用分解点获取不同的数据,完成字符串到其他类型的转换
    • 初始化:
      1. istringstream istr("1 56.7");  
      2. istr.str("1 56.7");//把字符串"1 56.7"存入字符串流中 
    • 常用函数str(),完成字符串流->字符串。e.g. 
    • istringstream istr("1 56.7");
      string str = istr.str();  //函数str()返回一个字符串
    • 转换到其他数据类型,包括string, int, double, float等。
    • //同样的初始化
      istringstram istr("1, 56.7");
      int n;
      doulbe d;
      
      //以空格为界,把istringstream中数据取出,应进行类型转换
      istr>>n; //第一个字符转换为整型数据1
      istr>>d; //第二个字符转换为浮点数56.7
      
      //假设换下存储类型   
      istr>>d;  //istringstream第一个数要自动变成浮点型,输出仍为1 
      istr>>n;  //istringstream第二个数要自动变成整型,有数字的阶段,输出为56 

       

 实现2: @Python 

def lastSymLen():
    while True:
        try: 
            line = raw_input()
            if len(line)==0 :
                print 0
                break
            if len(line)>5000 :
                line = line[:5000]
            wordList = line.split()
            print len(wordList[-1])
        except:
            break

if  __name__ == "__main__":

    lastSymLen()

小结:

在网上看到的更简洁的版本

1 import sys
2 for line in sys.stdin:
3     a = line.split()
4     print len(a[-1])

posted on 2017-07-17 15:02  小鱼吐泡泡  阅读(152)  评论(0编辑  收藏  举报

导航