class string
{
public:
friend istream& operator >> (istream& is, string& str);
private:
char *m_data;
};
int main()
{
string str;
freopen("in.txt","r",stdin);
while(cin >> str)
{
cout < < str < < endl;
}
return 0;
}
あるin.txtの内容:オーバーロード関数のクラス文字列のオーバーロード演算子>>関数を書くにはどうすればよいですか?
asdfsfgfdgdfg
、私はcoutの意志を意味し、それらのcharatersを一つずつ読んでますが、仕上がりをCINときにプログラムが円を飛び出すするis.get()
を使用走りません。他の方法では、代わりにgetchar()
を試してみますが、円を飛び越えることはできません。
質問:この機能に対する私の考えでは任意の間違っているのですか?またはもう一つのよりよい方法があります。 THX :)
=========================================== ============================= 新しい編集: ここに私のコード: @Artemバーガー コード詳細
#include <iostream>
namespace Str
{
class string
{
public:
string():k(0){}
friend bool operator >> (std::istream& is, string& str)
{
int size = 100;
char m;
if((m = getchar()) && m == -1)
return false;
str.m_data = new char[size];
do
{
if(str.k == size)
{
size *= 2;
char *temp = new char[size];
for(int j = 0; j < str.k; ++j)
{
char *del = str.m_data;
temp[j] = *str.m_data++;
delete del;
}
str.m_data = temp;
temp = NULL;
}
str.m_data[str.k++] = m;
}while((m = getchar()) && m != -1);
return true;
}
friend void operator << (std::ostream& os, string& str)
{
os << str.m_data;
str.k = 0;
delete []str.m_data;
}
private:
char *m_data;
int k;
};
}
using namespace Str;
int main()
{
string str;
while(std::cin >> str)
{
std::cout << str;
}
return 0;
}
まだおそらく、あなたはあなたの問題を解決する必要のある、このようなあなたのコードを書き換えることができ
do
{
}while();