最后一个单词的长度,自己能运行,过不了OJ。
本帖最后由 chinalixs 于 2015-2-17 17:26 编辑题目:
最后一个单词的长度例如: s = “hello World”, 那么返回的结果是5格式: 第一行输入字符串s,然后输出s中最后一个单词的长度。样例输入Today is a nice day
样例输出3
#include <stdio.h>
int main()
{
char s;//想不出好方法只能用一个1000的数组,求指教。
gets(s);
int i=0,m=0;//m用于计数
//如果是\0停止,如果是‘空格’,m从0开始计数。
for(i=0;i<100;i++)
{
if(s=='\0')
break;
m++;
if(s==' ') m=0;
}
printf("%d",m);
return 0;
}
本帖最后由 醉空流澈 于 2015-2-18 18:19 编辑
你的代码确实错在字符串末有空格的情况下。
下面这个是我自己的,个人觉得容易理解,但有点乱好像…⊙﹏⊙
#include <stdio.h>
int main()
{
char s;
gets(s);
int len=0,i=0;
while(s!='\0')
{
if(s!=' ')
{
int temp=0;
while(s!='\0'&&s!=' ')
{
++i;
++temp;
}
len=temp;
}
else
++i;
}
printf("%d",len);
return 0;
}
下面这个是在计蒜客上别人贴出来的,把他的using namespace std;删了就正确了,比较简单:
#include <stdio.h>
int main()
{
char s;
gets(s);
int j=0, k=0;
for(int i=0; s!='\0';i++)
{
if(s==' ')
{
if(j!=0)
k=j;
j=0;
}
else
j++;
}
printf ("%d\n",j==0?k:j);
return 0;
}
下面的是C++的,更方便,也更容易理解:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
getline(cin,line);
int len=0;
for(int i=line.length()-1;i>=0;--i)
{
if(line==' ')
{
if(len!=0)
break;
}
else
++len;
}
cout<<len<<endl;
return 0;
} 本帖最后由 yes2 于 2015-2-28 13:19 编辑
不喜欢计蒜客这一点。出错的时候用于测试代码的输入输入是什么根本不给,这样我根本不知道哪里错了。确实是可以参考别人的代码,但是问题是别人的思路不一定和我的一样,我还是不知道我的错在哪里。即使思路一样,看了别人的代码我还是不知道错在哪!!如何进步?不知道错在哪
#include <stdio.h>
#include <string.h>
int main()
{
char sz;
int nLen = 0;
while (1)
{
sz = getc(stdin);
if (sz == ' ' || sz == '\t')
{
continue;
}
if (sz == '\n' || sz == '\r')
{
break;
}
ungetc(sz , stdin);
scanf("%s" , &sz);
nLen = strlen(sz);
}
printf("%d" , nLen);
return 0;
}
@homer @醉空流澈 我啥都不懂 ,我是来支持的 =_=..你这个算法..如果遇到单词后面有一个‘ ’怎么办? homer 发表于 2015-2-17 15:40
=_=..你这个算法..如果遇到单词后面有一个‘ ’怎么办?
出题的不会那么做吧。。。。现在问题是,我出错在哪! chinalixs 发表于 2015-2-17 17:13
出题的不会那么做吧。。。。现在问题是,我出错在哪!
错误就是这个 看不懂。。。。。 本帖最后由 chinalixs 于 2015-2-17 19:44 编辑
homer 发表于 2015-2-17 17:36
错误就是这个
改成这样,OJ提示我程序运行错误:在你的程序的执行过程中,可能出现了非法的文件访问、堆栈溢出、非法访问了内存单元、数组越界、在计算中把0作为除数等导致程序异常结束的情况。
我在编译器上没问题。。。求教!难道是s太小了。
#include <stdio.h>
int main()
{
char s;//想不出好方法只能用一个1000的数组,求指教。
gets(s);
int i=0,m=0;//m用于计数
//如果是\0停止,如果是‘空格’,m从0开始计数。
for(i=0;i<1000;i++)
{
if(s=='\0')
break;
m++;
if(s==' '&&s!='\0') m=0;//要注意如果最后一个单词最后一位是’ ‘!
if(s==' '&&s=='\0') m--;
}
printf("%d",m);
return 0;
} chinalixs 发表于 2015-2-17 19:41
改成这样,OJ提示我程序运行错误:在你的程序的执行过程中,可能出现了非法的文件访问、堆栈溢出、非法访 ...
1000的确太小了....简单的话就改成2w吧,高级一点就用指针存储字符串 homer 发表于 2015-2-17 19:55
1000的确太小了....简单的话就改成2w吧,高级一点就用指针存储字符串
好像错误出在,如果最后有好多空格,我这个就输出负数!想了几个办法都解决不了。。。亲~你怎么好像挂QQ一样啊!神一样的存在着。。。
页:
[1]
2