A sentence A picture A day!

Leetcode-atoi&rev Words

String to Integer

注意的几点:

* 字符串为空
* 全是空格
* 字符串前的空格要忽略掉
* 对‘+’和‘-’的处理
* 遇到非数字的字符就返回当前值而不是返回0
* int的范围  -2147483648~2147483647

【判断与int最值比较时记得*signal】

又用Python写了一遍,遇到的小问题:

* 空字符串str==''
* elif
* 判断条件中要加入i<len(str)
* 需要用ord()将字符转换成ASCII码

Reverse words in a string

第一个想法是,用空格将句子分割,再将单词组合 第二个想法,之前看过类似的,翻转整个句子,再翻转每个单词(同一个函数) 一开始按照第二种想法写了一下发现翻转之后的实现方法由于有连续空格与一类似,还多了翻转,索性直接用第一种:(

//注意要剔除收尾空格,将连续空格转为一个空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void reverseWords(string &s) {
    if(s=="")return;
    
    stringstream ss(s);// Insert the string into a stream
    stack<string> tokens;// hold words
    string buf;//buffer string
    s="";
    while(ss>>buf)
      tokens.push(buf);
    
    while(!tokens.empty())
    {
        buf=tokens.top();
        s=s+buf;
        if(tokens.size()>1)s=s+' ';
        tokens.pop();
    }
}

用的数据结构为栈stack,要是用vector注意push_back(),pop_back(),buf=tokens[tokens.size()-1] vector没有top方法 然后用Python做了一下,一条语句就能搞定。。。。

1
2
def reverseWords(self, s):
    return ' '.join(s.split()[::-1])

顺便小结一下和字符串有关的操作:

去掉两边的空格及指定符号

s.strip()
s.lstrip()//去掉字符串左边开始的空格
s.rstrip(',')//去掉字符串右边的连续逗号

#strcpy(s1,s2) 复制

s2=s1

#strcat(s1,s2) 连接

s1+=s2
连接数组中多个字符串:separator.join(strlist)  其中separator=','  strlist=['apple','pie','cake']

查找单个字符

#strchr(s1,c)
position=s1.index(c)

#strstr(s1,s2)查找字符串

index=s1.find(s2)//返回位置,如没有返回-1

#strcmp

cmp(s1,s2)

#strlen(s)

len(s)

s1=s1.upper()

s2=s2.lower()

#strrev(s) 翻转字符串

s=s[::-1]

s.split(‘,’)