string用法的练习题

string用法的练习题

  • 练习题1:字符串最后一个单词的长度
  • 练习题2:字符串中的第一个唯一字符(思想:计数排序)
  • 练习题3、验证回文串

练习题1:字符串最后一个单词的长度

//练习题1:字符串最后一个单词的长度
//描述:输入一行字符串,计算字符串最后一个单词的长度,单词以空格隔开
int main()
{
	string str;
	//cin >> str; //用cin输入字符串时,编译器遇到空格会自动跳到输入下一个对象
	getline(cin,str);
	size_t pos = str.rfind(' ');
	if (pos != string::npos)
		//找得到空格
	{
		cout<< str.size()-pos-1 <<endl;
	}
	else
		//找不到空格(说明字符串只有一个单词)
	{
		cout<< str.size() <<endl;
	}

	return 0;
}

练习题2:字符串中的第一个唯一字符(思想:计数排序)

// 练习题2:字符串中的第一个唯一字符(思想:计数排序)
// 给定一个字符串s,找到它的第一个不重复的字符,并返回它的下标。如果不存在,则返回-1;

class Solution
{
public:
	static int firstUniqChar(string s)
	{
		int countArr[26] = { 0 };
		for (auto ch : s)
		{
			countArr[ch - 'a']++;
		}

		for (size_t i = 0; i < s.size(); ++i)
		{
			if (countArr[s[i] - 'a'] == 1)
				return i;
		}
		return -1;
	}
};

int main()
{
	string s1("belho,werld");
	cout << Solution::firstUniqChar(s1) << endl;

	return 0;
}

练习题3、验证回文串

//3、验证回文串
// 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。(说明:本题中,我们将空字符串定义为有效的回文串)
//
// 示例1:
// 输入:"A man, a plan ,a canal: Panama"
// 输出:true
// 解释:"amanaplanacanalpanama" 是回文串

class Solution
{
public:
	static bool isLetterOrNumber(char ch)
	{
		return(ch >= '0' && ch <= '9')
			|| (ch >= 'a' && ch <= 'z');
	}

	static bool isPalindrome(string s)
	{
		//大写字符转小写
		for (auto& ch : s)
		{
			if (ch >= 'A' && ch <= 'Z')
				ch += 32;
		}

		int begin = 0, end = s.size() - 1;
		while (begin < end)
		{
			while (begin < end && !isLetterOrNumber(s[begin]))
				++begin;
			while (begin < end && !isLetterOrNumber(s[end]))
				--end;

			if (s[begin] == s[end])
			{
				++begin;
				--end;
			}
			else
			{
				return false;
			}
		}

		return true;
	}

};

int main()
{
	string s1 = "hello , ollEH";
	cout << Solution::isPalindrome(s1) << endl;

	return 0;
}

你可能感兴趣的:(c++)