プロが教える店舗&オフィスのセキュリティ対策術

自作の関数なのですが名前はdoublequote.”を見つけたらそのまえにさらに”を追加するというかんすうで。そしてさらに進んで”を探してなかったら終了。
一番下にあります。vectorはならってないのでつかえませ。
まずテキストファイルを1行ずつ 配列に格納。次にsplit関数をつかって。|でくぎられたテキストファイルを一個ずつ配列に格納
EX ABC|DEF|GFD|
ABC
DEF
GFD. この配列のなかをdoublequoteを使ってなかみをかえるのですが。二つもんだいがあって。
一つは多分その関数自体が間違っている。よろしければよさそうに書き換えていただけますか?
二つ目はこのコード自体をXcodeでビルドするとlinker command failed ともう一つ問題が出てきてしまいうごかせません。どうすれば良いでしょうか御力をかしてください。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string split(string,char);
string doublequpte(string,char);
int main()
{string command;
fstream inputFile;
string inputfileName;
ofstream outputfile;
string outputfilename;
const int SIZE = 50;
const int SIZEfield = 200;
string lineOfTextInfo[SIZE];
string fieldsOfTextInfo[SIZEfield];
string inputrecord;
string fieldsOfdublequote[SIZEfield];
while (true)
{ cout << "Commands:";
getline(cin, command);

else if(command == "i") // open file for input
{
cout << "Enter name of input file: ";

getline(cin, inputfileName);

inputFile.open(inputfileName,ios::in);

while (!inputFile) {cout << "can not open\n";
cout <<"Enter name of input file: ";
getline(cin,inputfileName); }
}
else if (command == "o") //open file for output
{
cout << "Enter name of output file: ";
getline(cin, outputfilename);
outputfile.open(outputfilename);
while (!outputfile)
{cout << "can not open\n";
cout <<"Enter name of output file: ";
getline(cin,outputfilename);
}
}
else if (command == "p")
{
int actualSize = 0;
int actualSizepart2 = 0;

for (int i =0;i <SIZE;i++)
{
if (!inputFile.eof())
{
getline(inputFile,inputrecord);
lineOfTextInfo[i] = inputrecord;
actualSize++;
}
else
{
break;
}
}
for (int i = 0;i< actualSize ;i++)
{
cout <<"Input data = "<<lineOfTextInfo[i]<<"\n";
}
cout <<"End of file encountered.\n";
//actualSize-1

for( int ii = 0;ii < actualSize;ii++)
{
for ( static int bb = 0;bb<SIZEfield;bb++)
{
if ((fieldsOfTextInfo[bb] = split(lineOfTextInfo[ii], '|')).empty())
break;
actualSizepart2++;
}
}
for (int aa = 0; aa < actualSizepart2;aa++)
{ fieldsOfTextInfo[aa] = doublequpte(fieldsOfTextInfo[aa], '"');}
}
else
{cout << "Type correct keyboard.\n";}
} // (end 'while')

return 0;
} // (end function 'main')
string split(string str, char del)
{static int start = 0;
static int last;
int length;
string field ;
loop:last = str.find(del, start); //last =str.find(del,start);
if (last ==string::npos)
{ if (start != string::npos)
{field = str.substr(start, str.size() - start);
--last;
} //field = str.substr(start,str.size()-start);
}
else
{if ((length = last - start) == 0)
{start = last + 1;goto loop;
}
field = str.substr(start,length);
}
start = last +1;
return field;
}
string doublequote(string str,char del)
{int start = 0;
string field;
int last = str.find(del,start);
while (last !=string::npos)
{str.insert(last,"\"");
start = last;
if (last == string::npos)
{ field = str;
start = 0;
last = 0;
break;
}
}
return field;
}

A 回答 (1件)

リンカーのエラーは



>string doublequpte(string,char);

typoでしょう。定義はdoublequoteになっていますが、
doublequpteの定義がないまま呼び出されているせいだと思います。

で、関数が正しくないというのはどの関数がどういう動きを期待していて
実際にはどういう動きになっているのですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!