字符串的逆序 以及字符串的转换

来源:互联网 发布:sql select if 编辑:程序博客网 时间:2024/06/09 14:35

首先以一个题目为切入点,题意如下:

给定一个字符串str,请在单词间做逆序调整,如“pig loves dog”逆序成“dog loves pig”;如“I'm a student.”逆序成“students. a I'm”。

对于这个题目我们的思想就是装换。第一步将全部的字符串前后交换位置,第二部将每个单词前后交换位置。以“pig loves dog”为例,现将之转换成“god sevol gip”;然后再将转换后的字符串里的单词前后转换就成为“dog loves pig”.代码如下:

#include <iostream>#include<string.h>using namespace std;string reverse_string(string word){    int length=word.size(); //   cout<<length;    int i,j;    char tmpl;    for(i=0,j=length-1;i<j;++i,--j)    {        tmpl=word[i];        word[i]=word[j];        word[j]=tmpl;    }    return word;}int main(){    string input,result;    int i,j,length;    getline(cin,input);    length=input.size();    char temp[length];    input=reverse_string(input);    for(i=0;i<length;++i)    {        j=0;       memset(temp,0,length);                 //清空        while(input[i]!=' ' && input[i]!='\0')        {           temp[j++]=input[i++];        }        result=temp;          //可以直接将char数组 赋值给string        result=reverse_string(result);        cout<<result<<" ";    }    return 0;}
结果如下:



编程中遇到的问题:

在编程中对于字符串的转换问题有点阻挠。  最开始的时候定义了两个string;

 string input,temp;
目的是使用input里面的单词赋值到temp:
int j=0;
 while(input[i]!=' ' && input[i]!='\0') {      temp[j++]=input[i++]; }
但是由于单词的长度不是固定的,而string类型的temp其长度不能随着单词的变化而变化,所以我们改用char数组作为中间值:

 char temp[length];

在得到单词之后,在将单词赋值给一个string类型的result,使用result作为参数进行单词转换并接收函数传回的string:

  result=temp;          //可以直接将char数组 赋值给string  result=reverse_string(result);
注意在将input单词赋值给char的时候需要将其清空:

   memset(temp,0,length);     
再则我发现将char数组赋值给string很容易,反之则比较麻烦。




0 0
原创粉丝点击