string的部分题目

本文探讨了如何将字符串转换为整数,涉及判断字符串中的字母、符号和数字,并通过从高位到低位计算数值。同时,讲解了如何使用双指针翻转字符串中的单词,通过大循环嵌套小循环实现单词的反转。这些技巧在字符串处理中非常实用。

目录

字符串转整形数字

翻转字符串中的单词


字符串转整形数字

把字符串转换成整数_牛客题霸_牛客网

 思路:我们分为三种情况:当字符串中有字母时,我们直接返回0,当字符串有+或-时,我们进行判断,假如为+时,我们就返回+值,为-的话,就返回-值,当字符中有数字时,我们从高位到低位进行计算。

class Solution {
public:
    int StrToInt(string str) {
        int i=0,isplus=1;
        for(auto ch:str)
        {
            if(isalpha(ch))
            {
                return 0;
            }
            if(ch=='+'||ch=='-')
            {
                isplus=ch=='+'?1:-1;
            }
            if(isdigit(ch))
            {
                i=10*i+ch-'0';
            }
        }
        return isplus*i;
    }
};

我们对代码进行逐语句分析:

我们首先创建一个变量i=0,isplus=1。这个变量0我们下面再分析,我们分析这个isplus

我们知道,我们的数字分为三种,带符号的和不带符号的,不带符号的默认是正数,带符号的+表示正数,-表示负数。

我们的isplus就相当于符号位,当我们判断为正数的时候,我们就让结果*1,判断为负数的时候,我们就让结果*-1.

对于无符号的默认为正数,所以我们设置的isplus初始值为1.

接下来,我们使用范围for,我们首先要判断字符串中是否有字母,假如有字母时,我们直接返回0。再判断字符串中是否有’+‘或者’-‘,假如有的情况下,我们根据符号来修改isplus的值。假如有数字,我们对数字进行计算,从高位到低位,ch-'0'表示数字字符对应的数字,前一位*10+后一位得到的结果就是我们想要的数字

范围for结束,i值就是字符串对应的数值,然后我们再×符号位对应的就是数字。

启示:对于这类字符串转换数字题目,我们可以采用从高位到低位的计算,对于符号位,我们可以设置一个符号值1,通过修改符号值1的正负来控制正负。

翻转字符串中的单词

力扣

 思路双指针的嵌套循环。

我们可以用一个while循环中嵌套三个循环的方法。

class Solution {
public:
    string reverseWords(string s) {
        int i=0;
        int start=0;
        int length=s.length();
        while(i<length)
        {
            int start=i;//start表示每一个单词的开头
            while(i<length&&s[i]!=' ')
            {
                i++;
            }//找到单词的末尾
            int left=start,right=i-1;
            while(left<right)
            {
                swap(s[left],s[right]);
                left++;
                right--;
            }//反转一个单词
            while(i<length&&s[i]==' ')
            {
                i++;
            }//找到下一个单词的开头
        }
        return s;
    }
};

思路:双指针

 我们首先让i找到单词的末尾,也就是\0的位置

 i-1就是第一个单词最后一个字母的位置

我们对start到i-1来实现交换

 接下来,让i跳过这些空格找到下一个单词的头字母位置,然后把i赋值给start

 循环的结束条件是当i刚好要越界的时候。

每次要进入循环时,把i赋值给start

然后执行三次循环:找空格,反转字母,找下一个单词的开头。

启示:对于反转带有空格的字符串的问题,可以采用大循环嵌套小循环以及双指针的问题,慢指针始终指向单词的开头,由快指针来进行操作。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值