【问题标题】:setting char arrays equal to eachother with isdigit and isalpha使用 isdigit 和 isalpha 设置 char 数组彼此相等
【发布时间】:2023-03-22 04:32:01
【问题描述】:

我试图将 char 数组设置为等于 2 个其他数组,具体取决于第一个数组中的元素是数字还是字母。该代码对我来说具有逻辑意义,但 for 循环后其他 2 个字符串的输出与逻辑不对应。是因为其他 2 个循环中某处缺少空值还是代码本身无效? arrayAlpha、arrayNum 和 palind 都是长度为 30 个元素的 char 数组,而字符串长度在 for 循环开始之前已经确定。

for(int k=0; k<=stringLength; k++)
{
    if( isalpha(palind[k])){
        arrayAlpha[k]=palind[k];}
    if ( isdigit(palind[k]))
    {
        arrayNum[k]=palind[k];
    }
}

【问题讨论】:

  • 你能给出你预期的输出和样本输入吗?如果您的问题与isalpha/isdigit 或检查回文有关,那会很混乱
  • @codekaizer 是的,例如我在 palind[] 中的字符串将是 abc123 所以我希望其他 2 个字符串对于 arrayAlpha 具有 abc,对于 arrayNum 具有 123
  • 什么是palindchar*?或std::string?还是别的什么?
  • @edmonda7 从逻辑上讲,你不认为你需要两个不同的下标而不是一个k吗?如果palin 中有 50 个字母字符和 1 个数字字符怎么办?
  • @edmonda7 -- 如果唯一的数字是最后一个字符并且有 50 个字符怎么办?你的k 下标不是0,而是49,你将写信给arrayNum[49],而不是arrayNum[0]。您需要两个下标,一个用于跟踪您在 alpha 数组中的位置,另一个用于跟踪您在 digit 数组中的位置。

标签: c++ c arrays


【解决方案1】:

给定输入:

char palind[30] = "12345abcde";
  • arrayAlpha 是垃圾。

  • arrayNum"12345"

然而,

char palind[30] = "abcde12345";
  • arrayAlpha"abcde"
  • arrayNum 是垃圾。

因此,[k] 在您的arrayNumarrayAlpha 中使用时会出现问题,而0 不以0 开头。

简单的改变只是减去另一个的长度。

arrayAlpha[k - strlen(arrayNum)] = palind[k];
arrayNum[k - strlen(arrayAlpha)] = palind[k];

因为lengthOfPalind = lengthOfArrayAlpha + lengthOfArrayNum 假设palind 只包含字母或数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多