V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kirara
V2EX  ›  程序员

这代码怎么 AC 不了

  •  
  •   kirara · 2019-07-24 00:25:31 +08:00 · 3352 次点击
    这是一个创建于 1952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原题

    代码:

    #include <iostream>
    #include <ctype.h>
    using namespace std;
    int main() 
    {
    	string s;
    	int num;
    	cin>>s;
    	for(int i=0; i<s.length(); i++)
    	if(isalpha(s[i])) num++;
    	cout<<num;
    	return 0;
    }
    
    kidtest
        1
    kidtest  
       2019-07-24 00:30:02 +08:00
    num 的值需要手动初始化为 0,这种局部变量编译器是不会帮你初始化的。
    kirara
        2
    kirara  
    OP
       2019-07-24 01:12:16 +08:00 via Android
    说来也奇怪,大多数时候它会帮你初始化为 0,偶尔会出错,但这应该不是问题的关键。
    kirara
        3
    kirara  
    OP
       2019-07-24 01:13:05 +08:00 via Android
    @kidtest 说来也奇怪,大多数时候它会帮你初始化为 0,偶尔会出错,但这应该不是问题的关键。
    Aoerz
        4
    Aoerz  
       2019-07-24 01:58:52 +08:00 via Android
    oj 会有多组测试数据的
    doowzs
        5
    doowzs  
       2019-07-24 02:06:52 +08:00 via Android
    @kirara 堆栈了解过吗?🤔 非常简单的说全局变量会初始化 0 的,局部变量不会
    wyfyw
        6
    wyfyw  
       2019-07-24 02:15:17 +08:00
    局部变量 C++标准没有要求初始化。另外如果没有<<endl,刷新缓冲区,应该也可以输出。
    xiadong1994
        7
    xiadong1994  
       2019-07-24 02:45:44 +08:00
    使用未初始化的堆栈变量属于 undefined behavior
    Aoerz
        8
    Aoerz  
       2019-07-24 06:41:26 +08:00 via Android
    #include <iostream>
    #include <ctype.h>
    using namespace std;
    int main()
    {
    string s;
    int num=0;
    while(cin>>s){
    for(int i=0; i<s.length(); i++)
    if(isalpha(s[i])) num++;
    cout<<num<<endl; }
    return 0;
    }

    手机上打的...
    andyhuzhill
        9
    andyhuzhill  
       2019-07-24 10:14:22 +08:00
    @kirara #2 都已经说出问题所在了,还觉得不是问题的关键
    kdashl
        10
    kdashl  
       2019-07-24 11:18:09 +08:00
    9 成的时候,都是少换行啊,特殊条件不满足的错误...oj 上的测试数据有很变态的
    ytmsdy
        11
    ytmsdy  
       2019-07-24 11:54:22 +08:00
    1:输入输出肯定有问题,一般 oj 会有多组数据,你这程序,算完一组就 exit 了
    2:num 没有初始化,安全起见还是初始化一下比较稳妥。
    w516322644
        12
    w516322644  
       2019-07-24 12:01:18 +08:00   ❤️ 1
    while(cin>>a>>b)cout<<(a+b)<<endl;
    看他的例子啊,他要求一直输入那样的吧。
    easylee
        13
    easylee  
       2019-07-24 12:07:54 +08:00
    玩算法的一定要严谨啊,#5 已经说的很清楚了,这是常识噻。

    ——来自多年炮灰的教训。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 23:04 · PVG 07:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.