输入一个英文句子,翻转句子中的单词,要求单词内的字符顺序不变。 如:I am a student. 转换成 student. a am I

 

 

输入一个英文句子,翻转句子中的单词,要求单词内的字符顺序不变。

如:I am a student. 转换成 student. a am I 

 

算法分析:

1、通过ReverseString(s,0,5)交换字符串第0位和第5位的字符,将I am a student. 转换成a am I student.

2、然后将字符向左移动一位变成 am I student.a

3、顺序向左移动7次就成为了student. a am I 

 

#include "iostream"
#include 
using namespace std;

void ReverseString(char *s,int from,int to)
 {
   //交换from和to位置的字符
     if(from

以上代码运行到s[from]=s[to]会出现

projectOne.exe 中的 0x0086193f 处最可能的异常: 0xC0000005: 写入位置 0x00867838 时发生访问冲突
projectOne.exe 中的 0x0086193f 处有未经处理的异常: 0xC0000005: 写入位置 0x00867838 时发生访问冲突
 不知道原因

 

 

 

由于char *s="I am a student.";是一个字符串常量,是保存在static内存块里,不能通过指针修改

所以需要把它改成:char arr[]="I am a student.";

 

方法二:

先翻转每个单词,然后再翻转整个句子。如先将“I am a student.”反转为“I ma a .tneduts”,然后再对中间结果“I ma a .tneduts”整体翻转,即为 “student. a am I”。

#include 
#include 
//反转一个单词[from,to]区间内的字母
void reserveString(char arr[],int from, int to)
{
    while(from < to)
    {
        char tmp = arr[from];
        arr[from]= arr[to];
        arr[to] = tmp;
        from ++;
        to --;
    }

    
}
/*
//这样写也可以
 void reverseString(char arr[],int from,int to)
 {
	 for(int i=from;from

 注意reverseString(arr, 0, n-1);//这边不能写成n,数组的下标比实际长度小1

输入一个英文句子,翻转句子中的单词,要求单词内的字符顺序不变。 如:I am a student. 转换成 student. a am I_第1张图片 

 

你可能感兴趣的:(c++,数据结构和算法,面试题)