本文共 2165 字,大约阅读时间需要 7 分钟。
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student",则输出 "student.a am I " 。
首先翻转整个字符串。产生的结果就是“.tneduts a ma i”。
翻转每一个单词。产生结果为“student. a am i”。
#include "string.h"#include//二维数组//#include //#include //int main()//{// char a[4][10] = {"i" , "am" , "a" , "student" };// for (int i = 3; i>=0; i--)// {// printf("%s ", a[i]);// }// system("pause");// return 0;//}//指针数组//#include //#include //int main()//{// char *str[] = { "i", "am", "a", "student" };// int len=strlen(str);// while (len >=0)// {// printf("%s ", *(str +(len--)));// }// system("pause");// return 0;//}#if 0void reserve(char arr[], int start, int end){ while (start < end) { char tmp = arr[start]; arr[start] = arr[end]; arr[end] = tmp; start++; end--; } return;}void reserve_str(char str[], int len){ int i = 0; int start = 0; int end = 0; reserve(str, 0, len - 1); //整体反转 while (i <= len) { if (SPACE==str[end] || END==str[end]) { reserve(str, start, end - 1);//反转每个单词,[start, end - 1] start = ++end; //下一个单词 } else { end++; } i++; } return;}#endifvoid reverse(char *Left, char *Right){ if (Left != 0 || Right != 0){ while (Left < Right) { char Tmp = *Left; *Left = *Right; *Right = Tmp; ++Left; --Right; } } return;}void reserve_str(char str[], int len){ if (SPACE == *str) return; reverse(str, str + len - 1);//整体逆置 char *pCur = str; while (END!=*str) { if (SPACE == *str || END == *str) { reverse(pCur, str - 1);//单词逆置 pCur = ++str; } else { str++; } } return;}
#ifndef STRING_H#define STRING_H#include#include #include #define NUM 100#define SPACE ' '#define END '\0'void reserve_str(char str[], int len);#endif
#include"string.h"#include#include int main(){ char str[NUM] = "i am a student"; printf("Enter a string:%s\n", str); reserve_str(str, strlen(str)); printf("Reverse a string:%s\n", str); system("pause"); return 0;}
OJ代码:
class Solution {public: //交换位置 void reverse(string &str,int begin,int end){ while(begin
转载地址:http://lqypi.baihongyu.com/