社区
新手乐园
帖子详情
怎样倒置字符串I am you为you am I
leejohn
2007-05-23 09:21:17
怎样倒置字符串I am you为you am I
写了很久无法解决,只好了请教了?
...全文
2073
46
打赏
收藏
怎样倒置字符串I am you为you am I
怎样倒置字符串I am you为you am I 写了很久无法解决,只好了请教了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
46 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zwpzwp123
2011-09-04
打赏
举报
回复
在C++中用的是string,而上面简单的就是用的char数组,完全是两回事,仅仅用数组和循环实现可以不是很多笔试题目的初衷吧...
ammana_babi
2007-07-20
打赏
举报
回复
呵呵实在不好意思,前面把题看错了,以为就是简单的翻转字符串呢。
下面给出答案,包含完整的代码。
PS:下面程序的代码在DEV C++ 4.9.9.2 下编译通过
你也可以参考我的blog上面的文章:
http://blog.chinaunix.net/u/25381/showart_343476.html
或
http://blog.csdn.net/ammana_babi/archive/2007/07/20/1700261.aspx
在不增加任何辅助数组空间的情况下,对于这个问题我们可以采用的办法就是:
办法一:
1、 翻转整个字符串。
2、 翻转每一个单词。
办法二:
1、 翻转每一个单词。
2、 翻转整个字符串。
办法一和二其实就是一个顺序的问题,并不影响算法的时间或空间复杂度。
下面给出代码:【本程序在DEV C++ 4.9.9.2 下编译通过】
#include <stdio.h>
#define IS_PRINT(ch) ( (ch) > 0x20 && (ch) < 0x7E )
// except cpace
char * ReverseEveryWord(char *str);
char * ReverseWholeString(char * str);
char * LR_Reverse(char *left,char *right);
int main(void)
{
char str[] = "Hello word! **";
char *p = str;
#if 0
ReverseWholeString(str);
ReverseEveryWord(str);
puts(str);
#else
ReverseEveryWord(str);
ReverseWholeString(str);
puts(str);
#endif
system("pause");
return 0;
}
char * ReverseEveryWord(char *str)
{
char *right = str,*left = str;
if(str == NULL)
return NULL;
while( !IS_PRINT(*right) )
right++;
while(*right)
{
left = right;
while(IS_PRINT(*right))
right++;
LR_Reverse(left,right-1);
while(*right && !IS_PRINT(*right))
right++;
}
return str;
}
char * ReverseWholeString(char * str)
{
char *p = str;
if(str == NULL)
return NULL;
while(*p) p++;
p--;
LR_Reverse(str,p);
return str;
}
char * LR_Reverse(char *left,char *right)
{
char tt,*ret = left;
if(left == NULL || right == NULL)
return NULL;
while(left < right)
{
tt = *left;
*left++ = *right;
*right-- = tt;
}
return ret;
}
haohuilai
2007-06-15
打赏
举报
回复
mark
zhongbx
2007-06-12
打赏
举报
回复
String str = "I an you";
String []s = str.split(" ");
然后倒着输出 s[] 就 Ok 了
zhongbx
2007-06-12
打赏
举报
回复
用 split()两下就出来了,何必呢,不过不知道c /c++ 中有没有这个哦
heixia108
2007-06-10
打赏
举报
回复
mark
piziq
2007-06-03
打赏
举报
回复
#include<iostream.h>
#include<string.h>
void reverse(char*str,int n)
{
if (n<=1)
return;
//交换str[]和str[n-1]
char temp=str[n-1];
str[n-1]=str[0];
str[0]=temp;
reverse(str+1,n-2);
}//实现交换字符
void main()
{
char str[100];
cout<<"please input a string";
cin.get(str,100);
reverse(str,strlen(str));
cout<<"after reverse,str="<<str<<endl;
canybox
2007-06-03
打赏
举报
回复
有N种算法.
基本思想可以这样:
1.分离字符串.
2.逆序输出.
hxrs2008
2007-06-01
打赏
举报
回复
好像在我的VC 6.0上连结出了错误~
main()
{ char a[]="she is my sister";
int i,j,k=0;
for(i=strlen(a);i>=0;i--)
{ k++;
if((a[i]!=' ')&& (i!=0))continue;
for(j=i;j<=k+i;j++)
printf("%c ",a[j]);
printf(' ');
k=0;
}
}
mikithebest
2007-05-25
打赏
举报
回复
以前没看清楚,以为只用倒置字母就行了。自己写了一个倒置单词的,代码有些长,但是不会出错,可以去掉多余的空格。
#include <stdio.h>
#include <stdlib.h>
#define MAXLETTER 100
int position;
char words[MAXLETTER][MAXLETTER];
void storage(char inputs[]);
int numofwords(char inputs[]);
main ()
{
int a;
char input[MAXLETTER];
gets(input);
storage(input);
for(a=numofwords(input)-1;a>=0;a--)printf ("%s ",words[a]);
system ("pause");
}
int numofwords(char inputs[])
{
int a,number=0;
for (a=1;a<=MAXLETTER-1;a++)
{
if ((inputs[a]==' '||inputs[a]=='\0')&&inputs[a-1]!=' ')number++;
if (inputs[a]=='\0')break;
}
return number;
}
void storage(char inputs[])
{
int a=0,b,c;
position=0;
while(position<=MAXLETTER)
{
if (inputs[position]=='\0')break;
b=0;
while (inputs[position]!=' ')
{
words[a][b]=inputs[position];
words[a][b+1]='\0';
position++;
b++;
if (inputs[position]==' ')a++;
}
position++;
}
}
lin_style
2007-05-24
打赏
举报
回复
虫子的代码厉害。 。
leejohn
2007-05-23
打赏
举报
回复
楼上的想法很巧妙啊,没用复杂的函数。
laiwusheng
2007-05-23
打赏
举报
回复
//用得着这么麻烦吗?
///////////////////////
main()
{ char a[]="she is my sister";
int i,j,k=0;
for(i=strlen(a);i>=0;i--)
{ k++;
if(a[i]!=' ')continue;
for(j=i;j<=k+i;j++)
printf("%c ",a[j]);
printf(' ');
k=0;
}
}
dai_weitao
2007-05-23
打赏
举报
回复
重点就在分离词汇,很简单。
abcd_abcd
2007-05-23
打赏
举报
回复
写了个垃圾代码,权且学习下。。。。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *sourceStr = "I am you";
char *desStr = (char *)malloc(20);
char *ptr;
char *temp;
int len = 0;
ptr = temp = sourceStr + strlen(sourceStr);
while ( ptr >= sourceStr )
{
if (*ptr == ' ' || *ptr == *sourceStr)
{
if (*ptr == ' ')
{
strncpy(desStr+len, ptr, temp-ptr);
len += temp-ptr;
temp = ptr;
ptr--;
}
else
{
strcpy(desStr+len, " ");
strncpy(desStr+len+1, ptr, 1);
ptr--;
}
}
else
ptr--;
}
strcpy(desStr+len+2, "\0");
puts(desStr);
free(desStr);
desStr = NULL;
return 0;
}
spofmy
2007-05-23
打赏
举报
回复
先把字符串全部倒过来,再把每个单词(以空格为界)倒过来。
sinovoice
2007-05-23
打赏
举报
回复
学习大家的方法,我这还有一个使用cstring的strtok()函数比较简单。
char string[]="I am you";
char *ps=" ";
char *token;
使用:
token = strtok( string, ps);
while( token != NULL )
{
/* While there are tokens in "string" */
//这里进行些数组操作
.....
/* Get next token: */
token = strtok( NULL, seps );
}
打印数组
FingerStyle
2007-05-23
打赏
举报
回复
string s;
cin >> s;
copy(s.rbegin(), s.rend(), ostream_iterator<char>(cout, ""));
fengdream
2007-05-23
打赏
举报
回复
经调试通过
int main()
{
char a[] = "I am you ";
char b[3][5];
for(int i=0,j=0,k=0;i<strlen(a);i++)
{
if(a[i]!=' ' && a[i+1]==' ')
{
memcpy(b[j],a+k, i-k+1);
b[j][i-k+1]='\0';
printf("%s\n",b[j]);
j++;
k=i+1; //flag the lastest blank;
}//end of if
}// end of for//*/
for(i=2;i>=0;i--)
printf("%s\n",b[i]);
return 0;
}
czdj2000
2007-05-23
打赏
举报
回复
sscanf
然后利用栈
加载更多回复(26)
lodashed:Lo-Dash、Underscore.string + 一些其他有用的函数
破折号 Lo-Dash、Underscore.string + 单个强大的_中的其他一些有用功能。 “其他”功能 .type( [variable] ) 以
字符串
形式返回变量的类型。 _ . type ( [ ] ) ; // => array _ . type ( new Array ( ) ) ; // => array _ . type ( { } ) ; // => object _ . type ( new Object ( ) ) ; // => object .uncapitalize( [str] ) 取消大写
字符串
。 _ . uncapitalize ( "I AM MAD!" ) ; // "i AM MAD!" _ . uncapitalize ( "you're my hero!" ) ; // "you're my hero!" .replaceAl
输入
字符串
"I am a student",则输出 "student.a am I " 。
题目: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入
字符串
"I am a student",则输出 "student.a am I " 。 思路: 首先翻转整个
字符串
。产生的结果就是“.tneduts a ma i”。 翻转每一个单词。产生结果为“student. a am i”。 代码: #include "...
Python 47个
字符串
方法
# Python 47个
字符串
方法## 课程介绍同学们是否总是要搜资料、查官网后,才知道怎么操作
字符串
?如果是,来学学本课程吧,本课程以讲解官网文档的方式,讲解 Python 47个
字符串
方法,涉及替换、删除、连接、查找、分割、格式化、编码、转换等
字符串
操作,带同学们系统学习 Python
字符串
方法。
输入
字符串
“I am a student”,要求输出
字符串
“student a am I”
面试题目: 输入
字符串
“I am a student”,要求输出
字符串
“student a am I” #include void main() { char src[] = "I am a stdutent"; char *temp_start = src; char *temp_end = src; while (*temp_end !=
C语言—
字符串
,数组 输入
字符串
,包含:字母、数字、标点符号,以及空格字符,并将其逆序输出。例如,当输入
字符串
为“I am a student.”,输出为“.tneduts a ma I”
输入
字符串
,包含:字母、数字、标点符号,以及空格字符,并将其逆序输出。 例如,当输入
字符串
为“I am a student.”,输出为“.tneduts a ma I”,假设字符数组最大长度为100。 输入提示信息:"Please Enter String1:\n" 输入格式:gets() 输出格式:Result is:\n%s\n 程序运行结果示例: Please Enter String1: I am a student.↙ Result is: .tneduts a ma I #includ
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章