【问题标题】:Easy C++ = array length and reverse WITHOUT <string>Easy C++ = 数组长度和反向没有 <string>
【发布时间】:2016-07-03 04:49:52
【问题描述】:

我似乎无法获得数组的长度或向后打印!有什么帮助吗?!
void GetStringLenght 和 Print Backwards 底部的函数不起作用

#include <iostream>

void ReadString(char* c, int maxLength);

void GetStringLength(char* c, int* length);

void PrintString(char* const c);

void PrintStringBackwards(char* const c);

int main()
{
    const int SIZE = 50;
    char ca[SIZE];
    char* pc = ca;
    int fPrints = 0;
    int bPrints = 0;
    int lengthChecks = 0;

    char selection = 'z';
    while (selection != 'Q') {
        std::cout << "\n[ 1] Test ReadString\n";
        std::cout << "[ 2] Test GetStringLength\n";
        std::cout << "[ 3] Test PrintString\n";
        std::cout << "[ 4] Test PrintStringBackwards\n";
        std::cout << "[Q] Quit\n";
        std::cout << "Selection: ";
        std::cin >> selection;
        std::cin.ignore();
        std::cout << std::endl;

        switch (selection) {
        //Test ReadString
        case '1':
            ReadString(pc, SIZE);
            break;
        //Test GetStringLength
        case '2': {
            lengthChecks += 1;
            int length = 0;
            GetStringLength(pc, &length);
            std::cout << "Length[" << lengthChecks << "]=" << length << std::endl;
            break;
        }
        //Test PrintString
        case '3':
            fPrints += 1;
            std::cout << "Foward[" << fPrints << "]=";
            PrintString(pc);
            std::cout << std::endl;
            break;
        //[ 4] Test PrintStringBackwards
        case '4':
            bPrints += 1;
            std::cout << "Backwards[" << bPrints << "]=";
            PrintStringBackwards(pc);
            std::cout << std::endl;
            break;

        case 'Q':
            break;
        default:
            break;
        } //end switch

    } //end while
    std::cout << "Press ENTER";
    std::cin.get();
    return 0;
}

void ReadString(char* c, int maxLength)
{
    std::cout << "Enter a string less than " << maxLength << " characters." << std::endl;

    std::cin.getline(c, maxLength, '\n');
}

//BELOW THIS DOESNT WORK EITHER///
//////////////////////////////////////////
void GetStringLength(char* c, int* length)
{
    for (int i = 0; i < *length; i++) {
        if (c[i] == '\0')
            *length = i - 1;
    }
}

void PrintString(char* const c)
{
    int counter = 0;
    for (int i = 0; i < 100; i++) {
        if (c[i] == '\0') {
            counter = i;
            break;
        } //end if
    } //end for
    for (int j = 0; j < counter; j++) {
        std::cout << c[j];
        if (j == counter)
            std::cout << '\0';
    } //end for
    std::cout << std::endl;
} //end void

void PrintStringBackwards(char* const c)
{
    //this is where I’m lost! I’ve tried 25 different ways and everything is error.
}

【问题讨论】:

  • 反向循环
  • 这是你的真实代码吗?
  • @πάνταῥεῖ 是的,我真的需要我的家庭作业帮助
  • 是否禁止使用std::string
  • 迟早你需要学会使用调试器。但是为了让您朝着正确的方向开始,第一次调用 GetStringLength 时 *length 的值是多少? for 循环会执行吗?既然不知道字符串的长度,那么while循环不是更好吗?

标签: c++ visual-c++


【解决方案1】:

考虑for (int i = 0; i &lt; *length; i++),其中i*length 都是0,就像你的情况一样......那个循环会执行吗?不...考虑一个以x 开头的循环设置为0return x;,而str[x]'\0'。即strlen 中的循环执行此操作。

至于向后打印,从最高索引开始(由strlen 或您的函数在修复后返回)并递减,直到到达0,并在这些偏移处打印字符。

strlen&lt;cstring&gt; 中可用,顺便说一下,不仅仅是&lt;string&gt;...而且因为它是一个强制函数,所以它始终是任何C++ 实现的一部分。您可能应该只使用strlen...

【讨论】:

    【解决方案2】:

    要获取 C 字符串 (char*) 的长度,您可以使用 strlen(...)。 要向后打印,请执行以下操作:

    for(int i = strlen(str) - 1; i >= 0; --i)
        std::cout << str[i];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      相关资源
      最近更新 更多