转置字符串,其中单词内的字符需要正常

如题:转置一个字符串,需要其中的单词正常

例如:

Given s = "the sky is blue",
return "blue is sky the".

需要说明的是:

1、输入字符串可能会出现:前导空格,后置空格,要求输出的不能有前导空格和后置空格。

2、输入的语句中可能有两个单词之间出现多个空格,输出两个单词之间只能由一个空格。

#include <iostream>
#include <string>
using namespace std;

void reverse(string &s,int start,int end)
{
    while (start<end)
    {
        char tem = s[start];
        s[start] = s[end];
        s[end] = tem;
        start++;
        end--;
    }
}

void reverseString(string &s)
{
    if (s.empty()||s.length()==0)
    {
        return;
    }
    //去除前置和后置空格
    int num1 = s.find_first_not_of(" ");
    if (num1 == -1){
        s = "";
        return;
    }
    int num2 = s.find_last_not_of(" ");
    s = s.substr(num1,num2-num1+1);

    int start = 0,end = 0;
    int size = s.length();
    end = size-1;
    //整个字符串倒置
    reverse(s,start,end);
    //两个单词之间有多个空格的情况
    int count = 0;
    for (int i = 0; i < size; i++)
    {
        if(s[i] ==  ‘ ‘ && s[i+1] == ‘ ‘)continue;
        s[count++]=s[i];
    }
    if(count<size)s = s.substr(0,count);
    size = s.size();
    start = 0;
    end = -2;
    //其中每个单词倒置
    for (int i = 0; i < size; i++)
    {
        if(s[i] == ‘ ‘)
        {
            start = end+2;
            end = i-1;
            reverse(s,start,end);
        }
        if(i == size-1){
            start = end+2;
            end = i;
            reverse(s,start,end);
        }
    }
}

int main(int argc, char **argv)
{

    string s = "   a   b ";
    cout<<"before reverse: "<<s<<endl;
    reverseString(s);
    cout<<"after reverse: "<<s<<endl;

    return 0;
}
时间: 2024-11-09 06:54:05

转置字符串,其中单词内的字符需要正常的相关文章

字符串翻转,单词内不翻转

字符串翻转,单词内不翻转.如I am from Chongqing->Chongqing from am I 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 void reverse(char *str, int beg, int end); 6 void reverseSentece(char *str); 7 int main() 8 { 9 char str[128]; 10

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点 符号和普通字母一样处理

题目: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理 解答: 1 public class Solution { 2 public static void main(String[] args) { 3 String string = "I am a student."; 4 reverseSentence(string); 5 } 6 7 private static void reverseSentence(String s

字符串类型的内置方法

字符串类型的内置方法 用途:描述性质的东西,如名字,地址,国家等 定义:用单双引号或三引号包裹的字符,str() 方法可以把其他数据类型强制转换为字符串类型 name = 'nick' # name =str('nick') s1 = str(1.1) s2 = str([1, 2, 3]) print(f's1:{s1}, type:{type(s1)}') print(f's2:{s2}, type:{type(s2)}') s1:1.1, type:<class 'str'> s2:[1

【算法学习笔记】39.字符串处理 单词分割 SJTU OJ 1302 缩进格式

1302. 缩进格式 Description 小z想和小y愉快的玩耍,但是小y在写程序.程序写好了,但是小y怎么调试也过不了.小z帮小y看了一下就不想看了,因为小y虽然是萌妹子,但是她的程序缩进实在是不忍直视.于是小z决定帮她纠正. 程序里的每一行语句分为单词和空格,ASCII码从33到126的一段连续字符串是单词,而单词之间由ASCII码为32的空格分开.小z的缩进方法具体来说是这样:对于每一行的第 i 个单词,它的第一个字符的位置不能小于其它每一行的第 1 至第 i−1 个单词,且每个单词的

输出一串字符串中单词个数

#include <stdio.h> #include <stdlib.h> /* 输入一行字符串(单词和若干空格), 输出该行单词个数. */ int main(){ char ch, str[100]; int count = 0; gets(str); for (int j = 0; str[j] != '\0';++ j) if ((str[j + 1] == '\0') && (str[j] != ' ')) //到达末尾且不为空格,单词数+1 count

字符串之“统计一个字符串中单词的个数”

题目:统计一个字符串中单词的个数 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开 输入:my name is jacky 输出:the number of word is 4 代码如下: #include <stdio.h> int main(int argc, char *argv[]) { char str[80]; int i=0,num=0,flag=0; char c; gets(str); while((c=str[i])!='\0') { if(c==' ') flag

统计输入的行数,单词数和字符数

#include<stdio.h> #define IN 1 /*在单词内*/ #define OUT 0 /*在单词外*/ //统计输入的行数,单词数和字符数 int main(){ int c, nl, nw, nc, state; nw=nl=nc=0; state=OUT; while((c=getchar())!=EOF){ nc++; if(c=='\n') nl++; if(c=='\n' || c=='\t' || c==' '){ state=OUT; } else if(s

c 转置字符串You are a so cheap man -&gt;man cheap so a are You

解题思路: 1.将字符串转置 2.对转置后的字符串中单词转置 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<stdbool.h> 5 //字符串转置 6 void tranStr(const char *p,char *s) 7 { 8 int len = strlen(p); 9 int i,j; 10 for(i=len,j=0; i>=0,j<

leetcode——Reverse Words in a String 旋转字符串中单词顺序(AC)

题目如下: Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". click to show clarification. Clarification: What constitutes a word? A sequence of non-space characters c