LeetCode 8 String to Integer (atoi)(转换到整型)

翻译

实现“atoi”将字符串转换成整型数。

提示:仔细考虑所有可能的输入。如你想要挑战,请不要参阅下面并问问自己都有哪些可能的输入请看。

说明:模糊的指定(没有给定的输入规格)就是为了这个问题。你负责收集所有可能的输入。

atoi的要求:

函数首先放弃尽可能多的空字符直到找到一个非空白字符。然后从这个字符开始,带上可选的初始加/减字符,其后还可能跟着越多越好的数字,并将它们解释成一个数值。

这个字符串可能在这些数字之后包含一些附加的字符,它们可以可以被忽略,并对函数的行为没有影响。

如果字符串str中第一个非空格的序列不是一个有效的整型数,或者因为str为空或仅有空格字符而不存在这样一个序列,那么不执行任何转换。

如果可以不执行任何有效的转换,则返回零值。如果正确的值在值域范围之外,则返回INT_MAX(2147483647)或INT_MIN(-2147483647)。

原文

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Requirements for atoi:
The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

英语渣渣实在没看懂题目,不知道有哪些条件,于是就慢慢写代码,根据报错继续改……结果代码改到了80行……还是不能完成所有条件,还是从网上荡了一个下来,来日再战!

(好吧,在写博客,也就上面的翻译过程中,我发现题目懂了……)

public class Solution
{
    public int MyAtoi(string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return 0;
        }
        var result = 0;
        var i = 0;
        // clean all the whitespaces in the beginning
        while (i < str.Length && str[i] == ' ')
        {
            i++;
        }
        // check positive or negative sign
        var sign = 1;
        switch (str[i])
        {
            case '-':
                sign = -1;
                i++;
                break;
            case '+':
                sign = 1;
                i++;
                break;
        }
        // check the rest of numbers
        while (i < str.Length && str[i] >= '0' && str[i] <= '9')
        {
            // check overflow
            try
            {
                checked
                {
                    result = result * 10 + (str[i++] - '0');
                }
            }
            catch (OverflowException)
            {
                return sign == 1 ? int.MaxValue : int.MinValue;
            }
        }
        return sign * result;
    }
}
1045 / 1045 test cases passed.
Status: Accepted
Runtime: 168 ms
Your runtime beats 16.85% of csharp submissions.
时间: 2025-01-11 12:30:32

LeetCode 8 String to Integer (atoi)(转换到整型)的相关文章

[LeetCode]8. String to Integer (atoi)

[题目] 点击打开链接 Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this probl

将点分式的IP地址转换成长整型

  /** * */ package test; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; /** * @author wKF46214 * */ public class IpConvert { /** * @param args */ public static void main(String[] args) { try { long ip1

[LeetCode] String to Integer (atoi)

Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be spe

String to Integer (atoi)

Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases. Notes: It is intended for this problem to be spe

LeetCode 13 Roman to Integer(罗马数到整型数)

翻译 给定一个罗马数字,将其转换到整型数值. 输入被保证在1到3999之间. 原文 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 一开始就没有构思好,虽然按上一题的套路可以走下去,但结果就是像我下面这样--代码凌乱-- public class Solution { public int RomanToInt(string s)

LeetCode 12 Integer to Roman(整型数到罗马数)

翻译 给定一个整型数值,将其转换到罗马数字. 输入被保证在1到3999之间. 原文 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 我不会告诉你一开始我是用的无数个变量和if-- 后来实在受不了这么多变量就将其写成了枚举,那么接下来就迎刃而解了. 为了让大家理解罗马数是怎么计数的,这里我截了一张图,具体的大家可以自行用微软Bing

超过10位的String类型的整数转换成整型问题。

问题描述 超过10位的String类型的整数转换成整型问题. 请问下各位,我现在有个超过了10位的String类型的整数,想要把它转换成整型,然后用这个整型去跟其它的整型去作比较,请问下该怎么转换呢,Integer.parseInt()方法试了,要报java.lang.NumberFormatException异常,该怎么弄呢呢呢呢呢呢!!!! 解决方案 转成long怎么样,或者将其他整数转成string 解决方案二: Integer.parseInt()方法只用的一个参数,两个参数的不会用 解

VC之CString,wchar_t,int,string,char*之间的转换

    VC之CString,wchar_t,int,string,char*之间的转换 1. CString 转 wchar_t CString path = "asdf"; wchar_t wstr[256] = path.AllocSysString(); 或者: wchar_t wcstring[256]; MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);   2. wchar_t转CString WideCharToMul

CString, int, string, char*之间的转换

1 CString,int,string,char*之间的转换     string转CString     CString.format("%s", string.c_str());     char转CString     CString.format("%s", char*);     char转string     string s(char *);     string转char *     char *p = string.c_str();     //