按单词逆序句子(含标点)

主要思想:先写出单词逆序的函数,再写整个句子逆序的函数(在其中查找单词,找到后调用单词逆序的函数逆序,最后将整个句子逆序)。

程序缺点:只能识别几个常用的标点符号

源代码及测试程序:

//给定一个字符串,按单词将该字符串逆序,含标点
#include<stdio.h>     

//start 和 end 之间逆序的函数
void reverse_word(char *start, char *end)
{
    while(start < end)
    {
        *start = *start ^ *end;
        *end = *start ^ *end;
        *start = *start++ ^ *end--;
    }
}    

char *reverse_sentence(char *str)
{
    char *start = str;
    char *end = str;
    while(*end != ‘\0‘)
    {
        if(*end==‘ ‘ || *end==‘!‘ || *end==‘,‘ || *end==‘.‘ || *end==‘?‘)//查到一个单词
        {
            if(start < end)//只有一个字母的单词不逆序
                reverse_word(start, end-1);    

            while(*end==‘ ‘ || *end==‘!‘ || *end==‘,‘ || *end==‘.‘ || *end==‘?‘)
                end++; //指向下一个单词首字符     

            start = end;
        }
        else
            end++;
    }
    reverse_word(str, end-1);//整个句子逆序     

    return str;
}    

int main(int argc, char *argv[])
{
    char str[] = "Hello, I am glad to see you!";  

    printf("%s\n", str);
    printf("%s\n", reverse_sentence(str));    

    return 0;
}

  

时间: 2024-11-10 10:43:39

按单词逆序句子(含标点)的相关文章

英文句子中的单词逆序

#include "stdafx.h" #include <iostream> #include <string> #include <stack> using namespace std; int main(int arc, char** argv) { string str="I come from liaoning."; stack<string> works; int len=str.length(); whi

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

将字符串按照单词逆序

/*2.将字符串按照单词逆序 输入一段字符串,已知字符串只由字母和空格构成,将字符串按照单词逆序 传入@"welcome to beijing" 返回 @"beijing to welcome" */ + (NSString *)reverseWordsInString:(NSString *)str //{ // NSArray * arr= [str componentsSeparatedByString:@" "]; // NSArray

java小程序之单词逆序

单词逆序问题思路很简单,一个输入字符串,入栈,然后一个出栈追加到一个StringBuilder中,转化为输出字符串. 1 public class Reverse { 2 public static void main(String[] args) { 3 String inputStr = "jintianshiyigehaorizi"; 4 String outputStr = reverse(inputStr); 5 System.out.println(outputStr);/

将字符串依照单词逆序

/*2.将字符串依照单词逆序 输入一段字符串,已知字符串仅仅由字母和空格构成.将字符串依照单词逆序 传入@"welcome to beijing" 返回 @"beijing to welcome" */ + (NSString *)reverseWordsInString:(NSString *)str //{ // NSArray * arr= [str componentsSeparatedByString:@" "]; // NSArray

简单的算法编程题-任意段落按照单词逆序输出

把这个问题抛给温州皮鞋厂老板,老板直接就说这个题目的本意是让你提出stack的解决方案. ??what?stack?too low! ??因为这么个问题还要实现一个stack有点场面大了,事实上谁不知道你把一个个单词push进去,然后再pop出来不就好了吗?所以说stack方案太通用,不足挂齿.-周末没事干时折腾点此类问题,没有错,错在拉开蚊帐睡觉时吵醒疯子和小小,事情偶尔会变严重. ??另外,使用C语言完成和使用Java完成完全不同,Java调用现成的class会非常简单,复杂度完全隐藏在了内

字符串按单词逆序

leetcode 151. https://leetcode.com/problems/reverse-words-in-a-string/ Example 1: Input: "the sky is blue" Output: "blue is sky the" Example 2: Input: "  hello world!  " Output: "world! hello" Explanation: Your reve

将一组单词逆序输出

#include <iostream>#include <string>#include <vector>#include <stdlib.h>using namespace std;int main(){ string str; while(getline(cin,str)) { vector<string> array; string temp; for(auto i=0;i<str.size();i++) { if((str[i]&g

将句子的单词顺序逆序

package partice1; import java.util.ArrayList; import java.util.Iterator; import java.util.Stack; /** * “student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.” */ public class ReverseSetence { /** * 先将每一个单词逆序, 然后再将句子整体逆序 * 时间复杂度O(N) , 空间复杂