算法实现将输入的英语句子反过来输出
Posted mygod2093725_wht
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法实现将输入的英语句子反过来输出相关的知识,希望对你有一定的参考价值。
首先学习string库文件中的库函数,strtok和strcat
- char *strtok(char *str, const char *delim);
功能:来将字符串分割成一个个片段。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时, 则会将该字符改为\\0 字符,当连续出现多个时只替换第一个为\\0。
参数:
str: | 指向欲分割的字符串 |
delim: | 为分割字符串中包含的所有字符 |
返回值:
成功: | 分割后字符串首地址 |
失败: | NULL |
注意:在第一次调用时:strtok()必需给予参数s字符串
往后的调用则将参数s设置成NULL,每次调用成功则返回指向被分割出片段的指针
- char *strcat(char *dest, const char *src);
功能:将src字符串连接到dest的尾部,‘\\0’也会追加过去
参数:
dest: | 目的字符串首地址 |
src: | 源字符首地址 |
返回值:
成功: | 返回dest字符串的首地址 |
失败: | NULL |
strtok的详细使用请参考文章https://blog.csdn.net/sxy19930313/article/details/78548174
下面是用c++实现的代码:
//sentence flip
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
//首先需要将要分割的字符串,和分割字符传递过来,buf是char*类型的数组,num记录子串的个数
void splitsentence(char *src,const char *d,char **buf,int *num)
if ((src == NULL) || (d == NULL))
return;
*buf = strtok(src, d);
while(*buf != NULL)
(*num)++;
buf++;
*buf = strtok(NULL, d);
//翻转
void turn(char **buf,int num)
for (int i = 1; i <= num; i++)
cout << buf[num-i] << " ";
int main()
char src[100];//接收输入的字符串
char *buf[10];//定义一个数组,存放分割后的子串
const char *d = " ";//分隔符
int num=0;//字串数量
cin.get(src, 100);
//分割
splitsentence(src, d, buf, &num);
turn(buf, num);
system("pause");
return 0;
刷题目的时候发现不用库函数也好做,需要使用vector容器作为栈结构。
下面是用c++实现的代码:
class Soluton
public:
string ReverseSentence(string str)
vector<string> v_stack;
int length = str.length();
if (length == 0) return str;char* c = new char[length + 1]();
for (int i = 0; i < length; i++)
c[i] = str[i];
int start = 0;
int end;
for (int i = 1; i < length; i++)
if (c[i] == ' ')
end = i-1;
string sss = StrCut(str, start, end);
v_stack.push_back(sss);
start = end + 2;
//将最后一个单词放进去
end = length - 1;
string sss = StrCut(str, start, end);
v_stack.push_back(sss);string res;
if (v_stack.empty()) return str;
res += v_stack.back();
v_stack.pop_back();
for (int i = 1; !v_stack.empty(); i++)
res += " ";
res += v_stack.back();
v_stack.pop_back();
return res;
string StrCut(string str, int s, int e) //截取下标e到s之间的字符串
string strr;
for (int i = s; i <= e; i++)
strr += str[i];
return strr;
;
以上是关于算法实现将输入的英语句子反过来输出的主要内容,如果未能解决你的问题,请参考以下文章
PAT算法题C++实现(Basic)1009 说反话 (20 分)