字符串中的第一个唯一字符
字符串相加
class Solution {
public:
int AddItem(int a, int b, int& sign)
{
int sum = a + b + sign;//对应位相加时把进位算上
if (sum >= 10)
{
sum -= 10;
sign = 1;//发生进位则标为1
}
else//对应位相加没有进位则把sign复位
{
sign = 0;
}
return sum;
}
string addStrings(string num1, string num2) {
//计算的出发点和草稿纸上的计算一样,从低位加起
//逆置后相当于低位对齐了
//先计算出来的是数字的低位,如果不逆置,则每次计算出来的结果要头插到字符串里面
//逆置后新产生的位直接尾插即可
//在进行每一位相加的时候其实还是用了数字的,但是计算完每一位之后立刻转换成了字符
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int i, j, sign;
i = j = sign = 0;
int sum = 0;
string result;
while (i < num1.size() && j < num2.size())
{
sum = AddItem(num1[i] - '0', num2[j] - '0', sign);
result.push_back(sum + '0');
++i;
++j;
}
while (i < num1.size())
{
sum = AddItem(num1[i] - '0', 0, sign);
result.push_back(sum + '0');
++i;
}
while (j < num2.size())
{
sum = AddItem(0, num2[j] - '0', sign);
result.push_back(sum + '0');
++j;
}
if (sign > 0)
{
result.push_back(sign + '0');
}
reverse(result.begin(), result.end());
return result;
}
};
字符串转换成整数

class Solution {
public:
int StrToInt(string str) {
int sign = 1;
int sum = 0;
size_t i = 0;
if(str[0] == '-')
{
sign = -1;
++i;
}
else if(str[0] == '+')
{
sign = 1;
++i;
}
for(; i < str.size(); ++i)
{
if(!isdigit(str[i]))
{
return 0;
}
sum *= 10;
sum += str[i] - '0';
}
return sum*sign;
}
};