【问题标题】:String Handling problems in C [duplicate]C中的字符串处理问题[重复]
【发布时间】:2020-08-03 12:00:38
【问题描述】:

我刚刚做了一个代码,它可以在字符串中找到最后一个数字和最后一个字母,如下所示:-

#include<stdio.h>

main()
{
    char str[100] = "a1b2c3d4", ldig=-1, lalpha=-1, i;
    
    for(i=0; i < sizeof(str)-1; i++)
    {
        if(str[i] >= 48 && str[i] <= 57)
            ldig = i;
            
        else if(str[i] >= 97 && str[i] <= 122)
            lalpha = i;
            
        else if(str[i] >= 65 && str[i] <= 90)
            lalpha = i;
    }
    
    if(ldig != -1)
        printf("%c ", str[ldig]);
        
    if(lalpha != -1)
        printf("%c", str[lalpha]);  
}

这给了我正确的输出,即

4 d

但是当我尝试使用 scanf 或 get 输入数据而不是预定义字符串时,我得到了不正确的输出。

请帮忙

【问题讨论】:

  • “但是当我尝试使用 scanf 或获取时”。显示该代码。如果我们看不到它,则无法告诉您它可能有什么问题。猜测:错误使用sizeof 而不是strlen
  • 不保证 char 已在任何实现上签名。建议:char str[100] = "a1b2c3d4"; signed char ldig = -1, lalpha = -1;

标签: c


【解决方案1】:

sizeof(str)strlen(str) 不同。你应该使用后者。 sizeof 产生类型的大小,不一定是字符串的长度。

另外,避免从unsigned 值中减去。首选i + 1 &lt; strlen(str) 而不是i &lt; strlen(str) - 1,以防长度为零。 尽管在这种情况下,您仍然需要i &lt; strlen(str)。将i 的类型更改为size_t

然后使用标准库函数isdigit, isupper, islower, &c。而不是硬编码编码值 - 这是不可移植的。

【讨论】:

  • strlen() 工作正常...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多