PDA

View Full Version : Đoạn code nối chuỗi trên C++ in ra kết quả sai. Giúp mình?



anhtai116
08-08-2010, 12:58 PM
/* TAO LOP MANG CHUOI CUA RIENG BAN */

#include<stdio.h>
#include<string>
using namespace std;
class MyStringArray
{
string *_strings;
int _numstrings;
int _chunksize;
int _numused;
void expand()
{
//Allocate a new block
string *newBlock=new string[_numstrings + _chunksize];
_numstrings +=_chunksize;
for(int i=0;i<_numused;++i)
newBlock[i]=_strings[i];
//Delete the old array
delete[]_strings;
//Re-assign the pointer
_strings= newBlock;
}
public:
MyStringArray(void)
{
_chunksize=10;
_strings=new string[_chunksize];
for(int i=0;i<_chunksize;++i)
_strings[i]="";
_numstrings=_chunksize;
_numused=0;
}
MyStringArray(int nSize)
{
_chunksize=10;
if(nSize<=_chunksize)
{
_strings=new string[_chunksize];
_numstrings=_chunksize;
}
else
{
_strings=new string[nSize];
_numstrings=nSize;
}
_numused=0;
}
virtual ~MyStringArray(void)
{
delete[]_strings;
}
//Insert at start
void insert_string(const string &s)
{
//See it if will fit
if(_numused==_numstrings)
expand();
//It will now fit,move everything up
for(int i=_numused;i>0;i--)
_strings[i]=_strings[i-1];
//Put in the new one
_strings[0]=s;
_numused++;
}
void append_string(const string &s)
{
//See if it will fit
if(_numused==_numstrings)
expand();
//Put in the new one
_strings[_numused]=s;
_numused++;
}
string remove_at(int idx)
{
if(idx<0||idx>=_numused)
return string("");
//Save this one
string ret_string=_strings[idx];
//And copy all the others after it back
for(int i=idx;i<_numused;i++)
_strings[i]=_strings[i+1];
_numused--;
return ret_string;
}
string get_at(int idx)
{
if(idx<0||idx>=_numused)
return string("");
return _strings[idx];
}
int size()
{
return _numused;
}
};

int main(int argc,char **argv)
{
MyStringArray s(5);
for(int i=0;i<argc;i++)
{
printf("Appending %s\n",argv[i]);
s.append_string(argv[i]);
}
printf("Initial String Array:\n");
for(int j=0;j<s.size();j++)
printf("String %d=[%s]\n",j,s.get_at(j).c_str());
if(s.size()>5)
{
string str=s.remove_at(5);
printf("Removed string %s\n",str.c_str());
}
printf("Final String Array:\n");
for(int i=0;i<s.size();i++)
printf("String %d=[%s]\n",i,s.get_at(i).c_str());
}

cho mình hỏi là đoạn code trên sai chỗ nào mà khi mình chạy thay vì xuất ra danh sách các "Appending" và "string" thì nó lại xuất ra các đường dẫn đến file chương trình
http://www.mediafire.com/i/?gbr9pkpiuk6ab18

sẵn cho mình hỏi là trong khai báo main lại có (int argc,char **argv) hai cái này là gì z,nó có cần thiết không mà sao mình thấy mấy đoạn code minh họa trong sách đoạn nào cũng ghi hết,và cái vòng for màu đỏ trong bài chạy như thế nào ?

mình chỉ mới tham khảo cái visual c++ này nên mấy chỗ đó chưa hiểu lắm,mong pro giúp đỡ(:=(|)