当我翻转一个句子时,下面的代码在翻转后无法打印句子中的最后一个单词。
#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”。它没有显示“我的”。
答案 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.