我实际上是想利用这种方法来提取信息 但是我在做这件事时遇到了问题,我希望你们能够帮助我 我试图在"之间提取字符串时遇到问题。 ",例如"你好"提取你好。这些是我的方法。
旅行方法
char *Travels(char Destination, char *originPtr)
{
do
{
originPtr++;
}while (*originPtr != Destination);
originPtr++;
return originPtr;
}
在我的主要
int main()
{
//pointer for reading of file
char *startPtr1;
char Lines[256];
//read file and perform
ifstream chordfile("myfile.txt");
if (chordfile.is_open())
{
do
{
chordfile.getline(Lines, 256);
startPtr1 = Lines;
readFileInput(startPtr1);
}while(chordfile.eof() == false);
chordfile.close();
}
return 0;
}
在我的readFileInput方法中(我将显示部分方法)
//if it is insert.
if (strcmp(Stringg, "insert") == 0)
{
char *SpecialPtr1;
currentPtr1=Travels(' ',startPtr1); // travels to Insert(*) 7 "your_data"
int insertPeerNum = (int)atoi(currentPtr1); // travels to Insert (7) "your_data"
currentPtr1=Travels(' ',currentPtr1); // travels to Insert 7(*)"your_data"
currentPtr1=Travels('"',currentPtr1);
SpecialPtr1=Travels('"',currentPtr1);
*******this is the area which I am actually stucked at**********
}
在文本文件
中Insert 7 "your_data"
Insert 7 "hello"
答案 0 :(得分:2)
由于您未指定homework
标记,我建议您使用std::string
。此数据结构带有许多搜索和子字符串组合。
例如,在双引号之间查找文本:
#include <string>
//...
std::string::size_type start_position = 0;
std::string::size_type end_position = 0;
std::string text = "My \"cat\" is black.\n";
std::string found_text;
start_position = text.find("\"");
if (start_position != std::string::npos)
{
++start_position; // start after the double quotes.
// look for end position;
end_position = text.find("\"");
if (end_position != std::string::npos)
{
found_text = text.substr(start_position, end_position - start_position);
}
}
答案 1 :(得分:0)
您的代码存在一些问题:
在您的Travels方法中,条件while (*originPtr != Destination);
应为while((*originPtr!=Destination) && (*originPtr != '\0'))
关于检索字符串,您的逻辑看起来有点偏斜。实际上,您可能试图从两个'“'之间检索字符串。语句currentPtr1=Travels('"',currentPtr1);
之后的代码可以是
char extractedstring [100] = {0};
int i = 0;
while(((*currentPtr1 != '"') && (*currentPtr1 != '\0')) && (i<100))
{
extractedstring[i] = *currentPtr1;
currentPtr1++
i++;
}
答案 2 :(得分:0)
首先,我建议你使用std :: string进程方法,这会有很大的帮助:) 参考:string
// Helper Function
inline bool find_first(size_t& pos, const std::string& st, const char flag='\"')
{
if(pos!= std::string::npos)
pos=st.find_first_of(flag, pos);
return (pos!= std::string::npos);
}
inline bool find_last(size_t& pos, const std::string& st, const char flag='\"')
{
if(pos!= std::string::npos)
pos=st.find_last_of(flag);
return (pos!= std::string::npos);
}
template <class T>
inline T from_string(const std::string& s)
{
T t;
std::stringstream ss(s);
ss >> t;
return t;
}
// Excerp Sample Code
std::string stdline = Lines.
size_t start
size_t end;
std::string text;
std::string numberText;
int number;
if (stdLine.compare("insert"))
{
if (find_first(start, stdLine,' ') && find_lats(end,stdLine,' ')
{
numberText=stdLine.substr(start+1,end);
number = from_string(numberText);
}
if (find_first(start, stdLine) && find_lats(end,stdLind)
{
text=stdLine.substr(start+1,end);
}
}