string类常见题目详解(二)—— 把字符串转换成整数、反转字符串

题目一:把字符串转换成整数

题目描述:
 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入的字符串包括数字字母符号,可以为空。

示例:
 输入:”+2147483647″
 输出:“2147483647”

分析:
 字符串当中可能包含数字、字母和其他符号,正数可以在前面放上正号,由此可以确定的是,一个字符串一个合法的数值,则除了其第一个字符可能是正号或负号以外,其他字符都应该是数字字符。

步骤:
 1、先判断除第一个字符以外的字符,若是其中出现了非数字字符的字符,则该字符串非法,否则我们计算出其转换为整数后的数值。
 2、再判断第一个字符,若是正号,则当前整数的正值;若是负号,则返回当前整数的负值;若还是数字字符,则再次更新当前整数的数值并返回;若第一个字符不属于这三种情况,则说明该字符串还是非法的。

代码:

class Solution { 
public:
	int StrToInt(string str) { 
        if (str.size() == 0) //空字符串,返回0
			return 0;
		int start = 0; //头指针指向第一个字符
		int end = str.size() - 1; //尾指针指向最后一个字符
		int ret = 0; //字符串转换为整数后的结果
		int i = 1; //标识十进制当前位的权重(当前为个位,权重为1)
		while (start < end) //判断第一个字符之后的字符
		{ 
			if (str[end] < '0' || str[end] > '9') //若不是数字,则非法
			{ 
				return 0;
			}
			ret += i*(str[end] - '0'); //ret更新
			i *= 10; //下一位权重增大十倍
			end--; //继续判断
		}
		//判断第一个字符
		if (str[end] >= '0' && str[end] <= '9') //是数字
			return ret + i*(str[end] - '0'); //再次更新ret并返回正值
		if (str[end] == '+') //标识正数
			return ret; //返回正值
		if (str[end] == '-') //标识负数
			return -ret; //返回负值
		return 0; //第一个字符不是数字、+、-当中的一个,则还是非法
	}
};

题目二:反转字符串

题目描述:
 编写一个函数,其作用是将输入的字符串反转过来,你必须原地修改字符串,即使用O(1)的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。

示例:
 输入:[ ‘h’, ‘e’, ‘l’, ‘l’, ‘o’ ]
 输出:[ ‘o’, ‘l’, ‘l’, ‘e’, ‘h’ ]

思路:
 这是一道非常简单的题目了,尤其是用C++来做,我们可以使用下标的方式交换vector容器当中的数据,也可以使用逆置函数reverse对指定迭代器区间的数据进行逆置。做该题的唯一目的就是让我们熟悉容器的使用吧。

代码:
使用下标进行交换:

class Solution { 
public:
	void reverseString(vector<char>& s) { 
		//使用下标进行交换
		int left = 0, right = s.size() - 1;
		while (left < right)
		{ 
			swap(s[left], s[right]);
			left++;
			right--;
		}
	}
};

使用逆置函数进行逆置:

class Solution { 
public:
	void reverseString(vector<char>& s) { 
		//使用逆置函数进行逆置
		reverse(s.begin(), s.end()); 
	}
};
    原文作者:2021dragon
    原文地址: https://blog.csdn.net/chenlong_cxy/article/details/119668565
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞