字符串按单词逆序算法的实现

(from 牛客)
给定字符串,在单词间进行逆序
如“hello world!”逆序后为“world! hello”;
如“I love you.”逆序后为“you. love I”;
以下办法均用Java实现,思想最重要
1.直接使用String的split方法

    public String reverseWords(String str) {
//      使用split(" ")会删除最后的空字符串,但不会删除最前面的
//      如果添加一个limit参数-1,则会显示所有的空字符串
        String[] words = str.split(" ",-1);
        StringBuilder sb = new StringBuilder("");
        for(int i = words.length-1;i>=0;i--) {
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用C++中的string类和数组来解决这个问题。具体来说,可以先使用getline函数从输入流中读取一行字符串,然后使用for循环和条件判断来实现逆序输出该字符串,并计算该字符串中最多包含的单词数。需要注意的是,字符串中不包含空格或者其他分隔符时可以使用句点符号作为单词之间的分隔符。如果想要更加简洁高效的代码,可以使用STL库中的算法函数,如reverse和count_if等来实现该功能。 ### 回答2: 本题需要使用c新特性来编写程序,需要借助string类数组来实现。首先,我们可以用一个string类型的变量来输入字符串,并用空格分隔单词,将单词存入string类数组中,最后再逆序输出该数组即可。 代码如下: ```C #include <iostream> #include <cstring> using namespace std; int main() { string str; string words[20]; int cnt = 0; getline(cin, str); // 输入字符串 string word = ""; for (int i = 0; i < str.size(); i++) { // 按空格分隔单词 if (str[i] == ' ') { words[cnt++] = word; word = ""; } else { word += str[i]; } } words[cnt++] = word; // 最后一个单词 for (int i = cnt - 1; i >= 0; i--) { // 逆序输出数组 cout << words[i] << ' '; } cout << endl; return 0; } ``` 这里利用了C++中的string类型来方便地存储单词和操作字符串,也使用了数组来存储单词,这也是C++中的基本数据结构之一。当然,如果对于输入的字符串有更复杂的要求(比如包含标点符号、特殊字符等),可以在代码中进行相应的处理。 ### 回答3: 为了实现这个任务,我们可以使用C++11中的新特性,在输入数据的同时将字符串分割为单个单词。我们可以用string类数组来实现,它可以存储多个字符串。然后,我们可以使用一个for循环来逆序输出这些单词。 首先,让我们定义一个字符串数组并初始化为20个空字符串: string str[20] = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}; 然后,我们可以使用getline(cin, input)函数来输入一个字符串。该函数每次从输入流读取一行输入并存储在变量input中。接着,我们可以使用一个istringstream对象来将输入字符串分割成单个单词: istringstream ss(input); // 定义一个istringstream对象 string word; // 定义一个字符串 int i = 0; // 定义一个变量i,用来记录单词的数量 while (ss >> word) { str[i++] = word; // 将分割出来的单词存入字符串数组str中 } 这样,我们就可以将输入的字符串分割成单个单词并存储到字符串数组str中了。接着,我们可以使用一个for循环逆序输出这些单词: for (int j = i - 1; j >= 0; j--) { cout << str[j] << " "; // 按逆序输出单词 } 完整的程序代码如下: #include <iostream> #include <string> #include <sstream> using namespace std; int main() { string str[20] = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}; string input; getline(cin, input); istringstream ss(input); string word; int i = 0; while (ss >> word) { str[i++] = word; } for (int j = i - 1; j >= 0; j--) { cout << str[j] << " "; } cout << endl; return 0; } 需要注意的是,本程序忽略了字符串中的标点符号,并且最多只能输出20个单词。如果需要更高的可扩展性,可以将字符串数组大小设置为动态取值即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值