函数在C ++中返回字符串

时间:2013-03-28 06:39:14

标签: c++ string class function return

以下程序是使用具有预定义格式的类来输入用户输入的帐号 - 前两个是字母表,接下来的三个数字是分支代码,其余十个数字是一些随机数。如果输入的输入不是格式,则应提示用户再次输入。我尝试按如下方式实现它。如果我在第一次尝试时给出正确的输入它可以正常工作,但是当我检查else部分代码时,将'acno'的值返回到'tac'时会出现问题。有人可以纠正代码中的错误....谢谢......

#include<iostream>
#include<string>
using namespace std;

class saving
{
    string acc_no,tac;
    string br_code;
    public:
    void input();
} sav;

string chkno(string acno)
{
    string cc,bc,no,ano;
    int i,len,a=1,b=1,c=1;
    for(len=0; acno[len]!='\0'; len++);
    if(len!=15)
    {
        cout<<"Account No. is Invalid.Please enter again.";
        cout<<"\nAccount No : "; cin>>ano;
        chkno(ano);
    }
    else
    {
        cc=acno.substr(0,2);  bc=acno.substr(2,3);  no=acno.substr(5,10);
        for(i=0; i<2; i++)
        {
            if(!isalpha(cc[i]))
            {
                a=0; break;
            }
        }
        for(i=0; i<3; i++)
        {
            if(!isdigit(bc[i]))
            {
                b=0;  break;
            }
        }
        for(i=0; i<10; i++)
        {
            if(!isdigit(no[i]))
            {
                c=0;   break;
            }
        }
        if(a==1&&b==1&&c==1)
        {
           cout<<"\nValid - Account no : "<<acno;
            return acno;
        }  
        else
        {
            cout<<"Incorrect format.Please enter again";
            cout<<"\nAccount No : "; cin>>ano;
            chkno(ano);
        }
    }
}

void saving::input() 
{
    cout<<"Account No : ";
    cin>>acc_no;
    tac=chkno(acc_no);
    acc_no=tac;
    cout<<"\nAcc.No :"<<acc_no;
    br_code=acc_no.substr(2,3);
    cout<<"\nBranch Code is :"<<br_code;
}sav;

int main()
{
 sav.input(); return 0;
}

1 个答案:

答案 0 :(得分:0)

这是错误的

for(len=0; acno[len]!='\0'; len++);

C ++字符串与C字符串不同,它们没有'\ 0'终结符。如果你想知道C ++字符串执行多长时间

len = acno.size();

此外,如果您遇到错误,请再次拨打chkno,这有点奇怪,但实际上并没有错。但是,你做错了,永远不会从第二次调用返回chkno。你应该做的是这个

cout<<"Incorrect format.Please enter again";
cout<<"\nAccount No : "; cin>>ano;
return chkno(ano);

看看我是如何添加回报的。

对于本练习的最高分,我认为您应该重新设计代码。 chkno应该是一个只检查帐号的功能(毕竟这就是它的名称)。所以你应该让它返回一个布尔值,true为false,具体取决于帐号是否正确。然后你应该输入/重新输入你的数字循环在main。喜欢这个

bool chkno(string acno)
{
    ...
}

int main()
{
    cout<<"Account No : ";
    cin>>acc_no;
    while (!chkno(acc_no))
    {
        cout<<"Incorrect format.Please enter again";
        cout<<"\nAccount No : ";
        cin>>acc_no;
    }
    ...
}

这是编写此类任务的正常方式。这是更好的设计,因为它可以更清晰地分离两个任务,提示用户输入一个数字并检查该数字是否正确。