c++ 中如何反向输出一个字符串

比如有一个字符串aa-bb-ccc
要求变为ccc-bb-aa
请问如何解决

如果仅用于输出,最简单的方法,就是循环输出每个字符,从最后一个开始,到第一个结束。
如字符串变量为s,其长度为l,可以
for(int i = l -1; i >=0; i --)
cout <<str[i];

这样就可以实现反向输出了。
这种方式,对于字符数组(char[]或char *)形式的字符串,及string类字符串均有效。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-13

这种“按特殊字符倒序”的处理,只能自己写个公用类方法,当有需要时调用了。

简单思路:与直接倒序几乎一样,都是“把字符串作为字符数组从尾开始获取”,唯一不同的点是,你需要把获取的(多个)字符在检测到特殊字符的时候才添加到输出结果里。

伪代码:

//已获取的字符串strSource
string strResult=string.Empty;//可以替换为直接新建,只不过有赋值的话可以避免新建值有残余数值
string strTmp=string.Empty;
for(int i=strSource.Length-1;i>=0;i--)
{
 if(strSource[i]!="-")
  strTmp=strSource[i]+strTmp;
 else
 {
  if(strResult.Length>0)
   strResult+="-";
  strResult+=strTmp;
  strTmp=string.Empty;
 }
}
if(strResult.Length>0)
 strResult+="-";
strResult+=strTmp;
//输出结果strResult

有其他问题可追问。

第2个回答  2018-02-12

#include<stdio.h>

int main(){

int length,jishu=0;

char a[]={"aa-bb-ccc"};

char b[30]={0};

length=sizeof(a)-2;

while(length>=0){

b[jishu]=a[length];

++jishu;

--length;

}

printf("%s",b);

return 0;

看看中间的骨干代码是否符合需求

可根据需要进行修改

第3个回答  2018-02-12

无法理解???纯手打,求采纳o(^▽^)o

1)反向输出单词,例如I am a student变成student a am I

#include <iostream>
#include <cstring>
using namespace std;
int main(){
    char str[100];
    cin.getline(str,100);
    int n = strlen(str);
    int x=n-1,y=n-1;
    while(x>0){
        if(str[x]==' '){
            for(int i=x+1;i<=y;i++){
                cout << str[i];
            }
            cout << " ";
            y = x-1;
        }
        x--;
    }
            for(int i=x;i<=y;i++){
                cout << str[i];
            }
   }

2)全部反向输出 abc -> cba

#include <iostream>
#include <cstring>
using namespace std;
int main(){
    char str[100];
    cin.getline(str,100);
    int strlen = strlen(str);
    for(int i=strlen-1;i>=0;i--){
        cout << str[i]
    }
   }

第4个回答  推荐于2017-11-25
最简单的就是使用STL标准库的泛型算法,示例代码如下:

char *s = "aa-bb-ccc";
char rs[100] = {0};

reverse_copy(s, s + strlen(s), rs);

cout << rs;追问

但是如果改成中文好像就有问题啊
比如“好好_学习_天天_向上”
输出结果是乱码,请问是怎么回事啊

追答

这是编码的问题,存中文你不应该用char类型,一个char是放不下一个中文字符的,需要两个。
所以反转会乱码。
中文请这样做。

wchar_t *s = L"好好学习,天天向上";
wchar_t rs[100] = {0};

reverse_copy(s, s + wcslen(s), rs);

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网