C++函数实现求助:将字符数组转为对应整数并返回其平方值
字符数组转整数并返回平方值的正确实现
需求说明
创建一个函数,接收字符数组参数,将其转换为对应的整数后返回该整数的平方值。示例:输入字符数组"11",函数应返回121。
用户尝试的错误代码
char nr[] = "11"; cout << strToNumber(nr);//will return the value 121;
int strToNumber (char c[]) { int cifra, rezultat, fin; cifra = c - '0'; return cifra * cifra; } int main () { char sir[9] = "13"; char c; int n = strlen(sir); for (int i = 0; i < n; ++i) { c = sir[i]; strToNumber(c); } return 0; }
问题分析
- 指针运算错误:函数
strToNumber中,c是字符数组的指针,直接执行c - '0'是计算指针地址与字符'0'的ASCII值差值,不是字符转数字的正确逻辑。 - 参数类型不匹配:主函数中循环传递单个
char变量给需要char[](等价于char*)的函数,属于类型错误,无法正确调用。 - 缺少整数拼接逻辑:代码逐个处理单个字符并计算平方,没有将整个字符数组拼接成完整整数的步骤,完全不符合需求。
正确实现方案
方案1:自定义字符转整数逻辑
适合理解底层转换过程的实现:
#include <iostream> #include <cstring> // 用于strlen获取字符数组长度 using namespace std; int strToNumber(char c[]) { int num = 0; int len = strlen(c); // 遍历字符数组,拼接成完整整数 for (int i = 0; i < len; ++i) { // 仅处理合法数字字符(可选:可添加非数字输入的判断逻辑) if (c[i] >= '0' && c[i] <= '9') { num = num * 10 + (c[i] - '0'); } } // 返回整数的平方 return num * num; } int main() { char nr[] = "11"; cout << strToNumber(nr) << endl; // 输出121 char sir[] = "13"; cout << strToNumber(sir) << endl; // 输出169 return 0; }
关键逻辑解释
strlen(c):获取字符数组的有效长度(依赖字符串末尾的'\0'结束符)。- 整数拼接:
num = num * 10 + (c[i] - '0'),每次将当前数字左移一位(乘以10),再加上当前字符对应的数字(c[i] - '0'通过ASCII值差将字符转为数字)。 - 平方计算:拼接完成后返回
num * num。
方案2:使用标准库函数简化实现
如果不需要底层逻辑,可直接用atoi函数快速转换:
#include <iostream> #include <cstdlib> // 用于atoi函数 using namespace std; int strToNumber(char c[]) { int num = atoi(c); // 标准库函数直接将数字字符串转为整数 return num * num; } int main() { char nr[] = "11"; cout << strToNumber(nr) << endl; // 输出121 char sir[] = "13"; cout << strToNumber(sir) << endl; // 输出169 return 0; }
说明
atoi函数会自动处理合法的数字字符串,将其转换为int类型,代码更简洁,但如果需要处理非数字输入,需额外添加校验逻辑。
内容的提问来源于stack exchange,提问作者popescubianca
相关产品推荐
相关产品推荐

