题目
实现串str的逆转函数,如果str为空串,则什么都不做。
分析
由于串str是一个字符数组,所以逆转字符串,即逆转数组中的元素。
其实是个逆置问题。
代码
C语言代码
void swap(char &c1,char &c2) {
char temp=c1;
c1=c2;
c2=temp;
}
void invert(Str &str) {
int i=0,j=str.length-1;
while(i<j) {
swap(str.ch[i],str.ch[j]);
i++;
j--;
}
}
完整代码:
#include <stdio.h>
// 获取字符数组的长度
int length(char str[]){
int count=0;
int i=0;
while(str[i]!='\0'){
count++;
i++;
}
return count;
}
// 打印字符数组
void printStr(char str[]){
int i=0;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf("\n");
}
/********** 核心代码 0 **********/
// 倒序输出字符数组元素
void reverseStr(char *str)
{
int i=0, j=length(str)-1;
while(i<j){
char temp=*(str+i);
*(str+i)=*(str+j);
*(str+j)=temp;
// char temp=str[i];
// str[i]=str[j];
// str[j]=temp;
i++;
j--;
}
printStr(str);
}
/********** 核心代码 1 **********/
int main()
{
char str[]="Hello World!";
printStr(str);
reverseStr(str);
return 0;
}
再研究了下C语言中的&得出的代码(核心代码是swap和reverse方法):
#include <stdio.h>
// 打印一个字符数组
void print(char *str)
{
while(*str!='\0')
{
printf("%c",*str);
str++;
}
printf("\n");
}
// 计算一个字符数组的长度
int length(char *str)
{
int count=0;
while(*str!='\0')
{
count++;
str++;
}
return count;
}
// 交换两个元素的值
void swap(char &a, char &b)
{
char temp;
temp=a;
a=b;
b=temp;
}
// 倒序输出字符数组元素
void reverse(char *str)
{
int i=0, j=length(str)-1;
while(i<j)
{
swap(str[i], str[j]);
i++;
j--;
}
}
int main()
{
char str[]="Hello World!";// 注意必须是char[]而不是*char
print(str);
reverse(str);// 调用函数,倒序输出字符数组元素
print(str);
return 0;
}
Java代码
public class Demo1 {
public static void main(String[] args) {
String str="ABCDEFG";
char[] chars = str.toCharArray();
int i=0,j=chars.length-1;
while (i<j){
char temp=chars[i];
chars[i]=chars[j];
chars[j]=temp;
i++;
j--;
}
for (char aChar : chars) {
System.out.print(aChar);
}
}
}