给出一个英语句子,希望你把句子里的单词顺序都翻转过来
输入ILOVEYOU结果不正确,请问此代码错误地方在哪里?#include<stdafx.h>#include<iostream>#include<stdio.h>#in...
输入I LOVE YOU结果不正确,请问此代码错误地方在哪里?
#include<stdafx.h>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
char str[100];
char ch;
int i=0;
while((ch=getchar())!='\n')
{
str[i]=ch;
i++;
}
str[i]='\0';
i--;
if(str[i]==' ')
{
int n=0;
while(str[i]==' ')
{
n++;
i--;
}
for(int x=0;x<n;x++)
putchar(' ');
}
while(str[i]!=str[0])
{
while(str[i]!=' '&&str[i]!=str[0])
i--;
if(str[i]==' ')
{
int j=i+1;
while(str[j]!=' '&&str[j]!='\n')
{
putchar(str[j]);
j++;
}
putchar(' ');
i--;
}
}
while(str[i]!=' '&&str[i]!='\0')
{
putchar(str[i]);
i++;
}
return 0;
} 展开
#include<stdafx.h>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
char str[100];
char ch;
int i=0;
while((ch=getchar())!='\n')
{
str[i]=ch;
i++;
}
str[i]='\0';
i--;
if(str[i]==' ')
{
int n=0;
while(str[i]==' ')
{
n++;
i--;
}
for(int x=0;x<n;x++)
putchar(' ');
}
while(str[i]!=str[0])
{
while(str[i]!=' '&&str[i]!=str[0])
i--;
if(str[i]==' ')
{
int j=i+1;
while(str[j]!=' '&&str[j]!='\n')
{
putchar(str[j]);
j++;
}
putchar(' ');
i--;
}
}
while(str[i]!=' '&&str[i]!='\0')
{
putchar(str[i]);
i++;
}
return 0;
} 展开
3个回答
展开全部
str[i]!=str[0]
这个判断出现两次,改为:
i!=0
因为单词间可能存在字母相同的情况,而你要判断的是 i 是否为0,即当前字符是否为字符串首字符。
----分割----
str[j]!='\n'
改为:
str[j]!='\0'
读入时候已经确定读到 '\n' 停止,故 str[] 内不会含有 ‘\n' ,而且你是用 '\0' 做结尾,所以应判断 '\0' 。
----改错完毕----
不知道题目怎么要求,但是感觉英语句子句末会有个标点吧,是不是判一下比较好……
不用写 #include<iostream> ,你没用上。
追问
通过你的修改,在自己的PC上OK,但是上传到wikioi显示运行错误,能帮我解决下么?题目序号1205
http://wikioi.com/source/USACO/
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "ctype.h"
#include "string.h"
void main(void){
char str[100],i,ln,ch;
printf("Write an English sentence(less than 100 letters)...\n");
i=ln=strlen(gets(str));
while(!isalpha(str[--i]));
ch=str[i+1];
str[i+1]='\0';
for(i=0;i<ln;i++)
if(str[i]==' ') str[i]='\0';
for(i=0;i<ln;i++)
if(isalpha(str[i]) && (str[i-1]=='\0' || i==0))
strrev(str+i);
if(ch) str[i-1]=ch;
for(i=0;i<ln;i++)
if(str[i]=='\0') str[i]=' ';
printf("%s\n",str);
}
#include "stdio.h"
#include "ctype.h"
#include "string.h"
void main(void){
char str[100],i,ln,ch;
printf("Write an English sentence(less than 100 letters)...\n");
i=ln=strlen(gets(str));
while(!isalpha(str[--i]));
ch=str[i+1];
str[i+1]='\0';
for(i=0;i<ln;i++)
if(str[i]==' ') str[i]='\0';
for(i=0;i<ln;i++)
if(isalpha(str[i]) && (str[i-1]=='\0' || i==0))
strrev(str+i);
if(ch) str[i-1]=ch;
for(i=0;i<ln;i++)
if(str[i]=='\0') str[i]=' ';
printf("%s\n",str);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str; //定义字符串变量
getline(cin,str,'\n'); //读进字符串
int b = str.length(); //获取字符串长度,也就是字符个数
int i = b;
while(i>0)
{
while((i>0)&&(str[i-1]!=' '))
i--;
int j=i;
while((j<b)&&(str[j]!=' '))
{
putchar(str[j]);
j++;
}
if(i!=0)//如果输出的不是最后一个单词,则输出一个空格
putchar(' ');
i--;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询