我的目标是制作一个输入电话号码并以标准格式输出的程序。它跳过任何非数字字符,如果没有足够的数字将输出,并且还会跳过前十位数后的任何数字。我的猛禽工作顺利,但很难将其翻译成C ++。
我正在使用Microsoft Visual Studio。 问题是它没有运行。如果我输入的数字超过一个,我收到失败错误。
我在运行此代码时遇到了一些困难。 任何和所有的帮助和建议将不胜感激。
#include <iostream>
#include <string>
using namespace std;
void format(char outArray[], string inNumber)
{
outArray[0] = '(';
outArray[4] = ')';
outArray[5] = ' ';
outArray[9] = '-';
outArray[1] = inNumber[0];
outArray[2] = inNumber[1];
outArray[3] = inNumber[2];
outArray[6] = inNumber[3];
outArray[7] = inNumber[4];
outArray[8] = inNumber[5];
outArray[10] = inNumber[6];
outArray[11] = inNumber[7];
outArray[12] = inNumber[8];
outArray[13] = inNumber[9];
}
int main()
{
string phone, inNumber;
cout << "Please enter a phone number: ";
cin >> phone;
int index = 0;
int num = 0;
char outArray[14];
for (index; phone[index] >= '0' && phone[index] <= '9'; index++) {
inNumber[num] = phone[index];
num++;
}
if (inNumber.size() > 10)
{
format(outArray, inNumber);
cout << "The properly formatted number is: ";
cout << outArray;
}
else {
cout << "Input must contain at least 10 digits." << endl;
}
system("pause");
return 0;
}
答案 0 :(得分:0)
inNumber[num] = phone[index]; //undefined behavior.
您现在不能下标inNumber
,因为它的容量为0,因此它不能存储或访问这里的任何元素。
您可能需要使用string
的参数具有size_t
类型或string::reserve
或string::resize
的构造函数。
我很高兴看到cppreference现在变得更加完整,学会使用它:http://en.cppreference.com/w/cpp/string/basic_string
顺便说一句,这个功能不会做你想做的任何事情:
void format(char outArray[], string inNumber)
也许你想要这样的签名?
void format(char outArray[], string& inNumber)
答案 1 :(得分:0)
有几点需要注意:
std::string
代替char
数组。除非您这样做,否则您无需使用for循环检查租船人
不确定输入(phone
)。但是,如果是这种情况,请使用std::getline()
获取输入并使用基于for循环的范围进行如下解析。
我的目标是制作一个输入电话号码并输出的程序 标准格式。它将跳过任何非数字字符 输出如果没有足够的数字,也会跳过任何数字 前十位数后的数字。
这意味着该号码的最小长度为10.然后是
if
声明应为if (inNumber.size() >= 10)
format()
中通过ref调用传递,因为你想要
更改outArray
的内容。此外,inNumber
可能是一个
const ref,因为我们不更改此字符串的内容。format()
中)。更新的代码:
#include <iostream>
#include <string>
void format(std::string& outArray, const std::string& inNumber)
{
for(size_t index = 0; index < 10; ++index)
{
if(index == 0) outArray += '(';
else if(index == 3) outArray += ") ";
else if(index == 6) outArray += '-';
outArray += inNumber[index];
}
}
int main()
{
std::string phone;
std::cout << "Please enter a phone number: ";
std::getline(std::cin, phone);
std::string inNumber;
for (const auto& letter: phone)
if('0' <= letter && letter <= '9')
inNumber += letter;
if (inNumber.size() >= 10)
{
std::string outArray;
format(outArray, inNumber);
std::cout << "The properly formatted number is: ";
std::cout << outArray;
}
else {
std::cout << "Input must contain at least 10 digits." << std::endl;
}
return 0;
}