chinalixs 发表于 2015-2-17 15:26

最后一个单词的长度,自己能运行,过不了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:10

本帖最后由 醉空流澈 于 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:03

本帖最后由 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;
}

chinalixs 发表于 2015-2-17 15:26

@homer @醉空流澈

flyang123 发表于 2015-2-17 15:35

我啥都不懂 ,我是来支持的

homer 发表于 2015-2-17 15:40

=_=..你这个算法..如果遇到单词后面有一个‘ ’怎么办?

chinalixs 发表于 2015-2-17 17:13

homer 发表于 2015-2-17 15:40
=_=..你这个算法..如果遇到单词后面有一个‘ ’怎么办?

出题的不会那么做吧。。。。现在问题是,我出错在哪!

homer 发表于 2015-2-17 17:36

chinalixs 发表于 2015-2-17 17:13
出题的不会那么做吧。。。。现在问题是,我出错在哪!

错误就是这个

吾爱T阿杰 发表于 2015-2-17 17:47

看不懂。。。。。

chinalixs 发表于 2015-2-17 19:41

本帖最后由 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;
}

homer 发表于 2015-2-17 19:55

chinalixs 发表于 2015-2-17 19:41
改成这样,OJ提示我程序运行错误:在你的程序的执行过程中,可能出现了非法的文件访问、堆栈溢出、非法访 ...

1000的确太小了....简单的话就改成2w吧,高级一点就用指针存储字符串

chinalixs 发表于 2015-2-17 20:35

homer 发表于 2015-2-17 19:55
1000的确太小了....简单的话就改成2w吧,高级一点就用指针存储字符串

好像错误出在,如果最后有好多空格,我这个就输出负数!想了几个办法都解决不了。。。亲~你怎么好像挂QQ一样啊!神一样的存在着。。。
页: [1] 2
查看完整版本: 最后一个单词的长度,自己能运行,过不了OJ。