编写程序颠倒句子中单词的顺序

qhmilanista 2012-08-14 12:15:29
Enter a sentece: you can cage a swallow can't you? (下划线为用户输入的字符)
Reversal of sentence: you can't swallow a cage can you?

提示:用循环逐个读取字符,然后将他们储存在一个一维字符数组中。当遇到句话、问号或者感叹号(成为“终止字符”)时,终止循环并把终止字符存储在一个char类型的变量中。然后再用一个循环反向搜索数组,找到最后一个单词的起始位置。显示最后一个单词,然后反向搜索倒数第二个单词。重复这一过程,直至到达数组的起始位置。最后显示出终止字符。
...全文
1534 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_26952089 2015-03-28
  • 打赏
  • 举报
回复
#include <stdio.h> int main(void) { char a[200],ch; int i,j,x,b; printf("Enter a sentence:"); for(i=0;i<200;i++){ scanf("%c",&a[i]); if(a[i]=='\n'){ x=i; break; } } ch=a[x-1]; b=x-1; printf("Reversal of sentence:"); for(i=(x-1);i>=0;i--){ if(a[i]==' '){ for(j=i+1;j<b;j++){ printf("%c",a[j]); } printf(" "); b=i; } else if(i==0){ for(j=0;j<b;j++){ printf("%c",a[j]); } } } printf("%c",ch); return 0; }
zhanghuan007 2012-12-26
  • 打赏
  • 举报
回复
#include<stdio.h> #include<string.h> int main(void){ char symbol; char array[100]; int len,index,i,j; printf("enter your sentence:"); gets(array); printf("the sentence you enter is:"); puts(array); printf("\n"); len=strlen(array); index=len-1; for(i=len-1;i>=0;i--){//最完美的代码 if(array[i]==' '){ for(j=i+1;j<index;j++){ printf("%c",array[j]); } printf(" "); index=i; }else if(i==0){ for(j=i;j<index;j++){ printf("%c",array[j]); } } } /* for(i=len-1;i>=0;i--){//反打的第一个单词有空格 if(array[i]==' '||i==0){ for(j=i;j<index;j++){ printf("%c",array[j]); } printf(" "); index=i; } }*/ /* for(i=len-1;i>=0;i--){//第一个单词打不出来 if(array[i]==' '||i==0){ for(j=i+1;j<index;j++){ printf("%c",array[j]); } printf(" "); index=i; } }*/ printf("%c",array[len-1]); printf("\n"); return 0; }
把握 2012-08-15
  • 打赏
  • 举报
回复
程序比较简单了,你的思想对了
Defonds 2012-08-15
  • 打赏
  • 举报
回复
自己动手吧
Corner 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
C/C++ code


void reserverSentence(const char* sentence, int len, char sep)
{
int *index_mark = new int[len]();
int word_num = 1;
index_mark[0] = -1;
for(int i = 0; i < len; i+……
……
[/Quote]
代码就是C语言的,测试用的C++,你自己可以用C语言去测试
nice_cxf 2012-08-15
  • 打赏
  • 举报
回复
明显作业。。。。
qhmilanista 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C/C++ code


void reserverSentence(const char* sentence, int len, char sep)
{
int *index_mark = new int[len]();
int word_num = 1;
index_mark[0] = -1;
for(int i = 0; i < len; i+……
[/Quote]

楼上能否写成C语言的?
Corner 2012-08-14
  • 打赏
  • 举报
回复

void reserverSentence(const char* sentence, int len, char sep)
{
int *index_mark = new int[len]();
int word_num = 1;
index_mark[0] = -1;
for(int i = 0; i < len; i++)
{
if(sentence[i] == ' ')
{
index_mark[word_num] = i;
word_num++;
}
}

char * word;
int word_start, word_len;
index_mark[word_num] = len;
word_num++;
for(int i = word_num - 1; i > 0; i--)
{
word_start = index_mark[i - 1] + 1;
word_len = index_mark[i] - word_start;
word = new char[word_len + 1]();
memcpy(word, sentence + word_start, word_len);
cout<<word;
if(i != 1)
{
cout<<" ";
}
delete[] word;
}
cout<<sep<<endl;
delete[] index_mark;
}

void reserverSentences(const char* sentences, int len)
{
int old_pos = -1;
for(int i = 0; i < len; i++)
{
if(sentences[i] == '.' || sentences[i] == '?' || sentences[i] == '!')
{
reserverSentence(sentences + old_pos + 1, i - old_pos - 1, sentences[i]);
old_pos = i;
}
}
}

int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Enter a sentence"<<endl;
string line;
getline(cin, line);
reserverSentences(line.c_str(), line.size());
system("pause");
return 0;
}

执行结果:
Enter a sentence
How are you? I am fine.What Can I do for you?No thanks.
you are How?
fine am I .
you for do I Can What?
thanks No.
请按任意键继续. . .
ies_sweet 2012-08-14
  • 打赏
  • 举报
回复
算法基本上也给出来了
思路都有了
楼主可以自己动手编码的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧