2012-10-01 46 views
2

我已要求从标准文件中,如:串联字符数组在C++中

./gscheck < testfile 

哪里gscheck是我编译的可执行文件的名称。无论如何,我需要使用函数cin.getline()将每行读入一个字符数组。我知道如何做到这一点,

char line[250]; 
while (cin.getline(line, 250)) 
{ 
    Do stuff; 
} 

但最终,我不想每行做任何事情,我想连接的每一行成一个巨大的字符数组。我怎样才能使用上面的方法创建一个更大的字符数组,它包含每行的顺序并包含换行符,这样我基本上就是从文件中“sl'”,然后逐个字符地解析它,但是不能使用字符串类。

+0

什么是限制你使用'std :: string'的能力? – epsalon

+0

它的任务,要求我做这个愚蠢的方式... –

+0

你*有*使用cin.getline吗?它可以完成,但它会是邪恶的。 – marinus

回答

0

不要这样做。

只是说不。不要使用“字符数组”。

说真的。使用std::string

std::string result; 

for (std::string line; std::getline(std::cin, line);) 
{ 
    result += line; 
} 

但如果你只是想读一切并没有真正分析线(而是保持换行符),它可能是更简单直接访问输入缓冲器:

std::ostringstream oss; 
oss << std::cin.rdbuf(); 
return oss.str(); 
+1

上帝,我希望我能... –

+0

-1这显然是一项家庭作业的任务,初学者*应该*使用较低级别的方法之前,默认STL –

1

那么如何呢:

char file[2000]; 
char *end=file+1998; 
char *ptr=file; 
while (!cin.eof() && ptr < end) { 
    cin.getline(ptr, end-ptr) 
    ptr += strlen(ptr); 
    *ptr++ = "\n"; 
    *ptr = 0; 
} 
1

万一你有限制不使用dyn酰胺内存,它的std :: string是用肯定的:基于关闭@ KerrekSB的回答

char a[VERY_BIG_SIZE_ENOUGH_FOR_FILE]; 
std::cin.read(a, VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1); 
a[VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1] = '\0'; 
1

,您可以使用过时std::ostrstream,它使用字符数组(实际上是一个char *,但strlen你可以得到它作为一个数组轻松工作)。

std::ostrstream oss; 
oss <<std::cin.rdbuf(); 
return oss.str();