C++笔试题之实现字符串反转
2018-01-30 09:27
453 查看
一.简单的反转
要求不使用系统函数,不使用堆,且时间复杂度最小
#include <iostream>
using namespace std;
//字符串反转
char *strReverse(char *str){
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 定义char数组指针
char *start = str;
char *end = str;
while (*end != '\0'){//指向最后一个结点
end++;
}
// 交换头和尾的值
char temp;
--end;// 去除\0的位置
while (start < end){
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
int main(void){
char str[] = "cangege";
cout << strReverse(str) << endl;// 输出egegnac
system("pause");
return 0;
}二.扩展版反转
给出字符串数组,字符串由若干单词和空格组成,下边代码将数组中单词反转输出,输入“Welcome to Cangege Blog”输出为“Blog Cangege to Welcome”
代码思路为:
1.定义两个指针,分别指向一个单词的开头和结尾地址
2.先整体反转
3.然后以空格为单词结束标志分别反转
参考链接:http://blog.csdn.net/u010187139/article/details/47208919
要求不使用系统函数,不使用堆,且时间复杂度最小
#include <iostream>
using namespace std;
//字符串反转
char *strReverse(char *str){
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 定义char数组指针
char *start = str;
char *end = str;
while (*end != '\0'){//指向最后一个结点
end++;
}
// 交换头和尾的值
char temp;
--end;// 去除\0的位置
while (start < end){
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
int main(void){
char str[] = "cangege";
cout << strReverse(str) << endl;// 输出egegnac
system("pause");
return 0;
}二.扩展版反转
给出字符串数组,字符串由若干单词和空格组成,下边代码将数组中单词反转输出,输入“Welcome to Cangege Blog”输出为“Blog Cangege to Welcome”
代码思路为:
1.定义两个指针,分别指向一个单词的开头和结尾地址
2.先整体反转
3.然后以空格为单词结束标志分别反转
#include <iostream> using namespace std; // 扩展版反转 char * strReverseEx(char *str){ // 判断字符是否为null或是空字符串 if (str == NULL || str == '\0') { return str; } // 先整体反转 strReverse(str); // 定义char数组指针 char *start = str; char *end = str; while (true) { // 然后根据空格分单词反转 if (*end == ' ') { *end = '\0'; strReverse(start); *end = ' '; start = end+1; } // *end=='\0',说明到了字符串结尾 if (*end=='\0') { strReverse(start); break; } end++; } return str; } int main(void){ char str[] = "Welcome to Cangege Blog"; cout << strReverseEx(str) << endl;// 输出Blog Cangege to Welcome system("pause"); return 0; }
参考链接:http://blog.csdn.net/u010187139/article/details/47208919
相关文章推荐
- 使用C/C++编写函数,实现字符串反转,要求不使用任何系统函数,且时间复杂度最小
- 【C++】用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- 反转指向字符串反转C++实现源码(带测试用例)
- C/C++面试程序题(一)——字符串反转、链表反转的递归、非递归实现
- 使用C/C++实现对字符串的反转(递归和非递归)
- 用C++实现void reverse(char* str)函数,即反转一个null结尾的字符串.
- C++实现字符串反转
- 算法题 用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- C++面试题,不使用临时变量实现字符串反转
- c++已经实现的2种字符串反转函数
- 反转字符串(c++实现)
- C++笔试题之实现单链表反转
- 要求:不申请变量和空间 反转字符串 ,用一个函数实现。 异或^交换或者加减交换的典型应用! VIA 笔试题
- CI1.2 用c或c++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- 要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题
- 字符串反转C++实现源码(带测试用例)
- 使用递归实现字符串的反转
- java实现字符串反转
- C语言字符串反转的实现
- 《Java数据结构与算法》笔记-CH4-2用栈实现字符串反转