leetcode345逆转字符

leetcode代码:

class Solution {
private:
    bool isvowel(char c){/*判断是否为元音字母*/
        if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
            return true;
        else
            return false;
    }
public:
    string reverseVowels(string s) {
        int i = 0, j = s.size()-1;
        while(i < j){/*i指针始终在j指针左边时*/
            if(!isvowel(s[i])){/*如果不是元音字母*/
                i++;/*继续向后移动*/
                continue;/*结束当前循环的一个轮回,该循环内后面的语句不执行,继续该循环的下一个轮回*/
            }
            if(!isvowel(s[j])){/*如果j指向的元素不是元音字母*/
                j--;/*将j指针向前移动*/
                continue;/*重新进行该循环的下一轮回*/
            }
            swap(s[i++],s[j--]);/*i和j都指向元音字母时,将两个指针指向的元素交换*/
        }
        return s;/*最后将调转后的字符串返回*/
    }
};

c++全代码:


#include 
#include 

using namespace std;

string reverseVowels(string s);

bool isvowel(char c) {/*判断是否为元音字母*/
	if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
		return true;
	else
		return false;
}

string reverseVowels(string s) {
	int i = 0, j = s.size() - 1;
	while (i < j) {/*i指针始终在j指针左边时*/
		if (!isvowel(s[i])) {/*如果不是元音字母*/
			i++;/*继续向后移动*/
			continue;/*结束当前循环的一个轮回,该循环内后面的语句不执行,继续该循环的下一个轮回*/
		}
		if (!isvowel(s[j])) {/*如果j指向的元素不是元音字母*/
			j--;/*将j指针向前移动*/
			continue;/*重新进行该循环的下一轮回*/
		}
		swap(s[i++], s[j--]);/*i和j都指向元音字母时,将两个指针指向的元素交换*/
	}
	return s;/*最后将调转后的字符串返回*/
}

int main()
{
	char str[50];/*出错点:这里只申明了5个字符的空间,但是一个有5个字符的字符串实际需要6个空间,少算了一个结束字符'\0'*/
	cout << "please input a string of characters:";
	cin >> str;
	cout << reverseVowels(str) << endl;
	return 0;
}

你可能感兴趣的:(leetcode345逆转字符)