一、描述
请编写一个函数,其功能是将输入的字符串反转过来。
输入 hello
输出 olleh
二、思路
(1)for循环
(2)python s[::-1]
三、实现
1、python
之前看了一些其他题目,都是用类写的,尝试用类解决。
https://zhuanlan.zhihu.com/p/36744705解法如下:
(1)
class Solution:
def reverseString(self, s):
return s[::-1]
如何使用类?
class Solution:
def reverseString(self, s):
return s[::-1]
rs = Solution() #()不能少
rs.reverseString('python')
实用类,加这两句
为什么上面的运行没有结果? 把return改为print就可以了。
(2)自己写的:
class Solution:
def __init__(self,s):
print(s[::-1])
rs = Solution('python')
返回 nohtyp
以上两种方法的差异
class Test:
def __init__(self):
print('in init')
def testfunc(self):
print('in test func')
te = Test() # print in init
te.testfunc() # print in test func
- (4)for循环
(5)reverse实现
i)
class Solution:
def reversestring(self,s):
s = list(s)
print(s.reverse())
rs = Solution()
rs.reversestring('python')
注意:结果是None
没有输出结果的原因:reverse()函数没有返回值
修改为如下:
ii)
class Solution:
def reversestring(self,s):
s = list(s) # 字符串转列表。不能少;reverse只能作用于列表,不能直接作用于字符串
s.reverse()
# print('reversed s is ',s) # 结果:reversed s is ['n', 'o', 'h', 't', 'y', 'p']
print(''.join(s)) # 结果 nohtyp
rs = Solution()
rs.reversestring('python')
以上方法都不是本质的方法,(4.26)
双指针法:
思路非常简单
首先定义两个指针 left ,right 开始时分别指向 首元素,末尾元素
交换两个指针指向的元素,两个指针分别向中间移动,直至相遇。
当 left < right 时,
s = input(" Please input a string:")
class reversestring:
def reversestr(self, s):
left ,right = 0, len(s) - 1 #
while left < right:
# exchange left and right pointer
s[left],s[right] = s[right],s[left]
left += 1
right -= 1 # right += 1
return s
N = reversestring()
N.reversestr(s)
问题
TypeError: ‘str’ object does not support item assignment
s[left],s[right] = s[right],s[left]
原因是试图改变 字符串元素值
加一个字符串转列表 s = list(s)
2、C++ 实现
(1)for循环
倒着输出字符串
#include <iostream>
#include <string> // string类,要加头文件。
using namespace std;
int main()
{
string str;
cin >> str;
for (int i = str.size() - 1; i >= 0; i--)
cout << str[i];
return 0;
}
问题:若输入的字符串包含空格,就不能用以上代码。
分析:
题目要求是输入一行字符串,可能包含空格,比如输入:ABC DEF ,用cin的话,只会读取ABC,DEF会舍去,不符合其他测试案例,所以建议使用getline(cin,string),这样可以解决空格问题。
改进:
cin >> str;改为getline(cin,str);
C++ 双指针方法
#include <iostream>
using namespace std;
#include <string>
int main()
{
string s;
cin >> s;
int left = 0, right = s.length() - 1; // int left = 0, right = s.length - 1
while(left < right)
{
/*s[left], s[right] = s[right], s[left];
left += 1;
right -= 1;*/
char tmp;
tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
cout << "反转后的字符串为 " << s << endl;
getchar();
return 0;
}
四、收获
1、python:类的实例化在类名后,类的方法后必须有括号(),即使不传递参数。
2、python for循环
for iterating_var in sequence:
statements(s)
3、1)C++字符串长度
str.size() 或 str.length() 或 strlen(str)
- 字符串定义
string类:
C++使用内置的数据类型string来处理字符串会很方便,可以完全代替C语言中的char数组和char指针。
使用string类需要包含头文件string,string 类型的变量结尾没有“\0”,其本质是一个string类,因此可以通过调用string类中成员函数length()函数。
string a;//定义一个空字符串。
string b=“test string”;//定义一个字符串并初始化为test string。
字符数组:
char a[20] = “test string”;
4、C++ cin 遇“空格”、“TAB”、“回车”都结束
改用getline(cin,string);
5、还可以用python的 reverse实现
reverse()函数用于逆序排列 列表中元素。
注意:没有返回值;作用于列表,不是直接作用于字符串。
用法:list.reverse()
5、python中join()使用 https://www.cnblogs.com/jsplyy/p/5634640.html
语法: ‘sep’.join(seq)
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
返回值:返回以分隔符sep连接各个元素后生成的字符串
五、总结
1、python 的reverse 方法不是本质方法,双指针法是本质的,需要掌握。
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
本文深入探讨了多种字符串反转方法,包括Python和C++中的for循环、双指针法及类的使用,解析了每种方法的优缺点,并对比了Python与C++在字符串操作上的差异。

4534

被折叠的 条评论
为什么被折叠?



