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 <iostream>
#include <string>
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;
}