C++加解密程序仅处理前4字符问题求助:如何获取输入数组长度
解决C++单词加解密循环范围问题 & 获取输入长度的方法
嘿,我明白你的困扰——程序只能处理前4个字符,肯定是循环的终止条件写死成固定数值了对吧?别担心,咱们一步步来解决:
首先,获取输入内容的实际长度
在C++里,获取输入的单词长度有两种常用方式,取决于你用的是char数组还是std::string:
1. 如果你用的是char数组
可以用标准库的strlen()函数,它会自动计算从数组起始位置到第一个'\0'(字符串结束符)之间的字符数,也就是你输入的单词实际长度。记得要包含头文件<cstring>哦。
示例代码:
#include <iostream> #include <cstring> using namespace std; int main() { char word[100]; // 定义足够大的数组避免溢出 cin >> word; int length = strlen(word); // 获取实际输入的单词长度 cout << "单词长度:" << length << endl; return 0; }
2. 更推荐的方式:用std::string类
如果你改用std::string来存储输入的单词,那获取长度就更简单了,直接调用.size()或者.length()方法就行,而且完全不用担心数组溢出的问题:
示例代码:
#include <iostream> #include <string> using namespace std; int main() { string word; cin >> word; int length = word.size(); // 或者 word.length(),两者效果一样 cout << "单词长度:" << length << endl; return 0; }
然后,修改你的循环逻辑
原来的循环应该是写死了只执行4次,比如for(int i = 0; i < 4; i++),现在把循环的终止条件换成咱们刚才获取到的长度就行:
如果是char数组版本:
// 加密示例 for(int i = 0; i < strlen(word); i++) { word[i] += 1; // 简单的移位加密,你可以换成自己的加密逻辑 }
如果是std::string版本:
除了用下标循环,还可以用更简洁的范围for循环:
// 加密示例 for(char &c : word) { // 用引用才能修改原字符 c += 1; } // 或者下标循环 for(int i = 0; i < word.size(); i++) { word[i] += 1; }
这样循环就会遍历整个单词的每一个字符,而不只是前4个啦!
另外提醒一下:如果用char数组,一定要确保数组的大小足够容纳用户输入的单词(包括末尾的'\0'),不然会出现溢出问题,所以更推荐用std::string,它会自动管理内存,省心很多。
内容的提问来源于stack exchange,提问作者Ahmed Hassan
相关产品推荐
相关产品推荐

