句子翻转后句子中的最后一个单词不打印

时间:2016-01-02 16:38:02

标签: c++

当我翻转一个句子时,下面的代码在翻转后无法打印句子中的最后一个单词。

#include "stdafx.h"
#include "conio.h"
#include <string.h>

#include <iostream>

using namespace std;


int main()
{
    char sentence[80]={0};
    cout<<"Input the string: ";
    cin.getline(sentence,80,'\n');

    int length=strlen(sentence);
    int check=0;
    for(int i=length; i>0; i--)
    {
        if(sentence[i]!=' ')
        {
            check++;
        }
        else
        {
            for(int j=i; j<(check+i); j++)
                cout<<sentence[j+1];
            cout<<" ";
            check=0;
        }
    }
    return 0;
}

如果我们输入Sentence作为“我的名字是Rakesh”,它输出的输出显示为“Rakesh is Name”。它没有显示“我的”。

3 个答案:

答案 0 :(得分:1)

我在你的代码中发现了两个错误。

错误#01:

您没有迭代整个输入。由于语句i>0,您正在跳过数组的第一个索引。

可能的解决方案:

您应该将循环条件从i>0更改为i>=0,以便迭代整个输入。

错误#02:

您没有检查输入的第一个字的大小写,在您的情况下为My。如果sentence[i]!=' '的条件为假,则打印该单词,如果sentence[0]不是空格字符,那么将执行语句check++,然后循环将终止,以便输入的第一个单词将不会被打印。

可能的解决方案:

您应该通过在循环外打印单词或在循环中添加if条件来处理这种情况,以便在i == 0 && sentence[i] != ' '的情况下打印单词。我已根据第一种方法更新了代码,现在工作正常。

更新代码:

    int i = 0;
    for (i = length; i>=0; i--)
    {
        if (sentence[i] != ' ')
        {
            check++;
        }
        else
        {
            for (int j = i; j<(check + i); j++)
                cout << sentence[j + 1];
            cout << " ";
            check = 0;
        }
    }


    //Printing the missing word outside the loop
    for (int j = i; j<(check + i); j++)
        cout << sentence[j + 1];

希望这有帮助。

答案 1 :(得分:0)

如果您使用space字符开始和结束您的句子,它将起作用。在这种情况下,您需要将space字符和字符串结尾(null终结符)和字符串的开头视为相同的分隔符,因此您可以检测字符串的开头,字符串的结尾以及

之间的空格
  

尝试输入:&#34;我的名字是Rakesh&#34; (开头和结尾都有空格)

查看问题的范围...使用调试器逐步完成 (您通过使用strlen间接管理空终结符;并且您捕获了所有space个字符,但是您如何处理剩余的字符串,即通过位于开头的字符串分隔的单词字符串 - 索引0)

答案 2 :(得分:0)

好吧,

for(int i=length; i>0; i--)
当p = 1时,

结束,并且数组索引从0开始,因此这是问题之一。

将i&gt; 0更改为i&gt; = 0.