c ++,从文本文件中获取电话号码

时间:2009-12-03 16:34:54

标签: c++

我正在尝试将格式为555-555-5555的电话号码输入到具有三个int的结构中。我尝试使用带有“ - ”分隔符的getline,但我不断收到错误:“无法将参数1从'int'转换为'char *'”。

我尝试创建一个temp char *变量来存储数字,然后键入将其转换为int,但这不起作用。

我该怎么做呢?

由于

编辑:

这里有一些代码:

void User::Input(istream& infile) {

    char* phone_temp;

    ...

    infile.getline(phone_temp, sizeof(phoneNum.areaCode), "-");
    phoneNum.areaCode = (int)phone_temp;

    ...
}

8 个答案:

答案 0 :(得分:4)

由于您将此作为c ++问题发布,而不是c问题,请使用istringstream http://www.cplusplus.com/reference/iostream/istringstream/

从我的脑海中,你的代码会变成:

std::string sPhoneNum("555-555-5555");
struct
{
   int p1;
   int p2;
   int p3;
} phone;
char dummy;

std::istringstream iss(sPhoneNum);
iss >> phone.p1; // first part
iss >> dummy;    // '-' character
iss >> phone.p2; // second part
iss >> dummy;    // '-' character
iss >> phone.p2; // last part

编辑: 既然您已经发布了示例代码,我看到您已经开始使用istream,您可以直接使用>>运算符,无需创建另一个istringstream运算符。请参阅示例:http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

另外,如果你不需要,请使用char *和atoi的东西远离c风格的转换方法,使用std::stringistreams是“正确的”C ++方式。它避免了内存泄漏和其他令人讨厌的问题。

答案 1 :(得分:2)

从流中读取电话号码:

假设数字格式正确:

void User::Input(istream& infile)
{    

    int part1;
    int part2;
    int part3;
    char dash1; 
    char dash2; 

    infile >> part1 >> dash1 >> part2 >> dash2 >> part3;

    /*
     * !infile will return false if the file is in a bad state.
     *         This will happen if it fails to read a number from
     *         the input stream or the stream ran out of data.
     *
     * Both these conditions constitute an error as not all the values will
     * be set correctly. Also check that the dash[12] hold the dash character.
     * Otherwise there may be some other formatting problem.
     */ 
    if ((!infile) || (dash1 != '-') || (dash2 != '-'))
    {
         throw int(5); // convert this to your own exception object.
    }
}

答案 2 :(得分:1)

如果我理解正确,请尝试使用atoi()或stringstream将char *转换为int

答案 3 :(得分:1)

请参阅此example,了解如何对该行进行标记。这个question也会有所帮助。

然后使用atoi将字符串转换为int。

答案 4 :(得分:0)

您无法将char*投射到int并期望获得正确的值。 char*是内存中的地址,因此当您将其转换为int时,您将获得int中的内存地址。您需要调用一个函数,例如atoi(),以便将数据char*通过算法转换为整数。

答案 5 :(得分:0)

而不是使用infile.getline()使用带有std::string的独立版本:

getfile(infile, buffer);

之后,如果您愿意,可以添加getline()

istringstream phonenumber(buiffer);
string areacode = getline(phonenumber, part1. '-');

或者您可以使用提取器>> (这就是它的用途!)

int areacode;
phonenumber >> areacode;

请注意:如果您使用的是char*,请确保为其分配空间,或者至少指向已分配的空间。

答案 6 :(得分:0)

另一个可行的选择,虽然不是C ++,但是:

char a[10],b[10],c[10];
scanf("%d-%d-%d", a, b, c);

答案 7 :(得分:0)

您似乎正在尝试将char转换为整数,在这种情况下,您需要使用atoi函数或字符串流。