社区
C语言
帖子详情
翻转字符串中的单词顺序
k1x2d3
2006-09-13 09:40:56
就是把"put up you hands!"翻转成"hands! you up put",
用C语言,除了用栈,还有别的方法吗?比如说结构体?
写一个翻转字符串的函数
char * Reverse(const char* string)
{
...全文
947
29
打赏
收藏
翻转字符串中的单词顺序
就是把"put up you hands!"翻转成"hands! you up put", 用C语言,除了用栈,还有别的方法吗?比如说结构体? 写一个翻转字符串的函数 char * Reverse(const char* string) {
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
超级大笨狼
2006-12-15
打赏
举报
回复
http://community.csdn.net/Expert/topic/5232/5232012.xml?temp=.9141962
[超级大笨狼]提供三万单词库备份下载,MS-SQL 2000格式,下载请“自觉”捐赠可用分给我。
wyp2120
2006-10-26
打赏
举报
回复
#include<stdio.h>
#include<string.h>
void main()
{
char str[11]={"I LOVE YOU"};
char st[11];
int i=0;
st[10]='\0';
char *p;
p=str;
for(i=0;i<3;i++)
st[i]=*(p+7+i);
st[3]=32;
for(i=0;i<4;i++)
st[i+4]=*(p+i+2);
st[8]=32;
st[9]=*p;
printf("%s\n",st);
}
wyp2120
2006-10-26
打赏
举报
回复
用指针移动最简单
golden_sunflower
2006-10-25
打赏
举报
回复
w 是来拜牛人的..
吴冬冬
2006-10-25
打赏
举报
回复
汗 复制错误 再发
#include<stdio.h>
#include<string.h>
void main()
{
char name1[50];
char name2[50];
char temp;
int i,j,n,k,s,m=-1;
printf("请输入你要调换单词顺序的字符串:\n");
fflush(stdin);
gets(name1);
n=strlen(name1);
for(i=0,j=n-1;i<n;i++,j--)
{
name2[i]=name1[j];
}
name2[n]=' ';
for(i=0;i<=n;i++)
{
if(name2[i]==' ')
{
k=m+1;
m=i;
for(s=0,j=k;s<(m-k)/2;s++,j++)
{
temp=name2[j];
name2[j]=name2[m-1-s];
name2[m-1-s]=temp;
}
}
}
name2[n]='\0';
printf("\n%s\n",name2);
}
吴冬冬
2006-10-25
打赏
举报
回复
上面有个小错误 修改后如下 不好意思啊 粗心大意了 修改后简洁点
#include<stdio.h>
#include<string.h>
void main()
{
char name1[50];
char name2[50];
char temp;
int i,j,n,k,s,m=-1;
printf("请输入你要调换单词顺序的字符串:\n");
fflush(stdin);
gets(name1);
n=strlen(name1);
for(i=0,j=n-1;i<n;i++,j--)
{
name2[i]=name1[j];
}
for(i=0;i<n;i++)
{
if(name2[i]==' ')
{
k=m+1;
m=i;
for(s=0,j=k;s<(m-k)/2;s++,j++)
{
temp=name2[j];
name2[j]=name2[m-1-s];
name2[m-1-s]=temp;
}
}
}
k=m+1;
for(j=k,s=0;s<(n-k)/2;j++,s++)
{
temp=name2[k];
name2[k]=name2[n-s-1];
name2[n-s-1]=temp;
}
name2[n]='\0';
printf("\n%s\n",name2);
}
吴冬冬
2006-10-25
打赏
举报
回复
呵呵 学C刚一个月 应该是最低级的方法做的 看看好使不? 好使楼主自己转换为函数 :)
#include<stdio.h>
#include<string.h>
void main()
{
char name1[50];
char name2[50];
char temp;
int i,j,n,k,s,m=-1;
printf("请输入你要调换单词顺序的字符串:\n");
fflush(stdin);
gets(name1);
n=strlen(name1);
for(i=0,j=n-1;i<n;i++,j--)
{
name2[i]=name1[j];
}
for(i=0;i<n;i++)
{
if(name2[i]==' ')
{
k=m+1;
m=i;
for(s=0,j=k;s<(m-k)/2;s++,j++)
{
temp=name2[j];
name2[j]=name2[m-1-s];
name2[m-1-s]=temp;
}
}
}
k=m+1;
for(j=k,s=0;s<(n-k)/2;j++,s++)
{
temp=name2[k];
name2[k]=name2[n-s-1];
name2[n-s-1]=temp;
}
name2[n]='\0';
printf("\n%s\n",name2);
}
wyp2120
2006-10-25
打赏
举报
回复
好好利用用下那个空格就行了啊~~~~~~~~~~~~~~~用那个空格来判断,把空格转换成ASCII后判断,然后截取后在重新组装下就OK了~~~~~~~~~~~~~
swteetlove
2006-10-24
打赏
举报
回复
void reverseWords(char str[])
{
int start=0,end=0,length;
length=strlen(str);
ReverseString(str,start,length-1);
while(end<length){
if(str[end]!=' '){
start=end;
while(end<length&&str[end]!=' ')
end++;
end--;
ReverseString(str,start,end);
}
end++;
}
return;
}
void Reversestring(char str[],int start,int end){
char temp;
while(end>start){
temp=str[start];
str[start]=str[end];
str[end]=temp;
start++; end--;
}
return;
}
kkcs
2006-10-24
打赏
举报
回复
有du51(郁郁思扬)这么好的解决方案,还要说其它的吗?
wjh1127
2006-10-24
打赏
举报
回复
昨天刚好做了一个
#include <iostream.h>
char str[]= "hands! you up put";
void rev( char* p, int l)
{
char *h=p, *t=p+l;
char c;
int count=0;
while(count!=l/2+1)
{
c=*t;
*t=*h;
*h=c;
t--;
h++;
count++;
}
}
int findl( char* p,char ch)
{
char *pt=p;
int count=0;
while( (*pt!=ch) && (*pt!='\0') )
{
count++;
pt++;
}
return count;
}
void main()
{
int len;
int ch=' ';
len=findl(str, '\0');
rev(str,len-1);
char *p=str;
while( *p!='\0')
{
while(*p==ch)
{
p++;
}
int l=findl(p,ch);
rev(p, l-1);
p=p+l;
}
cout<<str<<endl;
}
飞哥
2006-10-24
打赏
举报
回复
不用栈,可以用循环~
leilei821006
2006-10-24
打赏
举报
回复
我的思路是先在空格的地方赋‘\0’,在从后向前查找下个‘\0’,输入‘\0’后面的字符串,
whatsblog
2006-10-24
打赏
举报
回复
mark
k1x2d3
2006-09-15
打赏
举报
回复
为什么我的程序执行到 *p='\0' 就会报内存出错?
zengjie_0_2001
2006-09-15
打赏
举报
回复
用堆栈的实现
#include <stdio.h>
#include <stdlib.h>
struct s_node{
char data;
struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link stack;
void push(char data){
link newnode;
newnode = (link)malloc(sizeof(s_list));
newnode->data = data;
newnode->next = stack;
stack = newnode;
}
char pop(){
link top;
char temp;
top = stack;
stack = stack->next;
temp = top->data;
free(top);
return temp;
}
int main(int argc, char **argv){
printf("this is a stringreverse c file!\n");
char *str = "put up your hands! yuy yuyu uyuy";
char *temp = str;
while(*temp)temp++;
int num = 0;
int init = 0;
temp--;
while(*str){
if(init == 0){
push(' ');
init++;
num++;
}
push(*(temp--));
num++;
if(*temp == ' '){
while(num > 0){
printf("%c",pop());
num--;
}
}
str++;
}
while(num > 0){
printf("%c",pop());
num--;
}
return 0;
}
iambtk
2006-09-14
打赏
举报
回复
楼主是不是写错了?
qdhuxp
2006-09-14
打赏
举报
回复
学习
Heaven_Redsky
2006-09-14
打赏
举报
回复
这个问题好像已经有很多兄弟研究过了
也提出了很多简单有效的方法
今天既然有人提出用栈 把以前写过的一个只有5各元素大小的模拟栈实现贴出来凑凑数吧
写得很粗糙 不好意思了
#include <tchar.h>
#include <iostream>
#include <windows.h>
using namespace std;
void sentenceReverse(const char* strIn, char* strOut)
{
int len = 0;
int i = 0;
int count = 0;
int countSpace = 0;
char *temp[5];
for(int j = 0; j < 5, *(strIn + i) != '\0'; j++){
temp[j] = new char;
while(*(strIn + i) != '\40'&& *(strIn + i) != '\0' && *(strIn + i) != '.' && *(strIn + i) != '!'){
i++;
}
memcpy(temp[j], strIn + count, i - count);
memcpy(temp[j] + i - count + 1, "\0", 1);
if(*(strIn + i) == '\40'){
countSpace++;
}
count = 1 + i++;
}
for(; j < 5; j++){
temp[j] = new char;
memcpy(temp[j], "\0", 1);
}
char *stack[5];
for(int k = 0; k < 5; k++){
stack[k] = temp[4 - k];
}
for(k = 4 - countSpace; k < 5; k++){
memcpy(strOut + len, stack[k], strlen(stack[k]));
len = len + static_cast<int>(strlen(stack[k]));
memcpy(strOut + len - 1, "\40", 1);
}
cout << strOut << endl;
delete [] (*stack);
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str = "i am a student!";
char* strOut = new char(static_cast<int>(strlen(str)));
sentenceReverse(str, strOut);
Sleep(5000);
return 0;
}
Arthur_
2006-09-14
打赏
举报
回复
i=0開始沒有給值,+上去吧
加载更多回复(8)
C语言左旋转
字符串
与
翻转
字符串
中
单词
顺序
的方法
主要介绍了C语言左旋转
字符串
与
翻转
字符串
中
单词
顺序
的方法,给出了相关的两道算法题目作为例子,需要的朋友可以参考下
字符串
按
单词
反转算法
字符串
处理是面试考察
中
的通常考题。本代码实现
字符串
按
单词
反转,
单词
建以空格分隔
java-leetcode题解之第557题反转
字符串
中
的
单词
III.zip
java java_leetcode题解之第557题反转
字符串
中
的
单词
III
翻转
单词
顺序
1
翻转
单词
顺序
1
python-leetcode面试题解之第151题反转
字符串
中
的
单词
-题解.zip
python python_leetcode面试题解之第151题反转
字符串
中
的
单词
_题解
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章