Easy C++ = 数组长度和反向没有 <string>
Posted
技术标签:
【中文标题】Easy C++ = 数组长度和反向没有 <string>【英文标题】:Easy C++ = array length and reverse WITHOUT <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循环不是更好吗?
【参考方案1】:
考虑for (int i = 0; i < *length; i++)
,其中i
和*length
都是0
,就像你的情况一样......那个循环会执行吗?不...考虑一个以x
开头的循环设置为0
和return x;
,而str[x]
是'\0'
。即strlen
中的循环执行此操作。
至于向后打印,从最高索引开始(由strlen
或您的函数在修复后返回)并递减,直到到达0
,并在这些偏移处打印字符。
strlen
在<cstring>
中可用,顺便说一下,不仅仅是<string>
...而且因为它是一个强制函数,所以它始终是任何C++ 实现的一部分。您可能应该只使用strlen
...
【讨论】:
【参考方案2】:要获取 C 字符串 (char*
) 的长度,您可以使用 strlen(...)
。
要向后打印,请执行以下操作:
for(int i = strlen(str) - 1; i >= 0; --i)
std::cout << str[i];
【讨论】:
以上是关于Easy C++ = 数组长度和反向没有 <string>的主要内容,如果未能解决你的问题,请参考以下文章
C++:带你搞定数组的疑难杂症--缓冲区溢出;数组越界;为什们打印内容能超出数组长度?
C++:带你搞定数组的疑难杂症--缓冲区溢出;数组越界;为什们打印内容能超出数组长度?