比如有一个字符串aa-bb-ccc
要求变为ccc-bb-aa
请问如何解决
å¦æä»
ç¨äºè¾åºï¼æç®åçæ¹æ³ï¼å°±æ¯å¾ªç¯è¾åºæ¯ä¸ªå符ï¼ä»æåä¸ä¸ªå¼å§ï¼å°ç¬¬ä¸ä¸ªç»æã
å¦å符串åé为s,å ¶é¿åº¦ä¸ºlï¼å¯ä»¥
for(int i = l -1; i >=0; i --)
cout <<str[i];
è¿æ ·å°±å¯ä»¥å®ç°ååè¾åºäºã
è¿ç§æ¹å¼ï¼å¯¹äºå符æ°ç»(char[]æchar *)å½¢å¼çå符串ï¼åstringç±»å符串åææã
å¦å符串åé为s,å ¶é¿åº¦ä¸ºlï¼å¯ä»¥
for(int i = l -1; i >=0; i --)
cout <<str[i];
è¿æ ·å°±å¯ä»¥å®ç°ååè¾åºäºã
è¿ç§æ¹å¼ï¼å¯¹äºå符æ°ç»(char[]æchar *)å½¢å¼çå符串ï¼åstringç±»å符串åææã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2018-02-13
这种“按特殊字符倒序”的处理,只能自己写个公用类方法,当有需要时调用了。
简单思路:与直接倒序几乎一样,都是“把字符串作为字符数组从尾开始获取”,唯一不同的点是,你需要把获取的(多个)字符在检测到特殊字符的时候才添加到输出结果里。
伪代码:
//已获取的字符串strSourcestring 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 *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);