求一个VC中定义长字符串的方法

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:51:37
这几天在作一个学校的ACM题,有一个题目就是输入一段字符串,然后去掉中间的空格,题目本来是很简单,但是它的输入范例是1000000个字符,我写的程序是定义了一个str[100000]都出现wrong answer,但是一旦定义str[1000000]编译的时候运行就会出现错误,请问大家怎么才能让其输入一个1000000长度的字符串呢?
顺便附下我代码,看看有没有错误:
#include <stdio.h>
int main()
{
int i=0,j=0;
char str1[100000],str2[100000];
gets(str1);
while (str1[i]!='\0')
{
if(str1[i]!=' ')
{
str2[j]=str1[i];
j++;
}
i++;
}
str2[j]='\0';
puts(str2);
return 0;
}

使用链表,要不就开辟一块内存,通过指针直接在内存里操作

void main()
{
char * p = (char*)malloc(1000000) ;//注意不要动指针p
char *p1, *p2 ;

。。。 //读入字串内存
p1 = p ;
p2 = p ;
for (long t=0 ; t<1000000 ; t++)
{
if (*p1 != ' ')
{
*p2 = *p1 ;
p2 ++ ;
}
p1 ++ ;
}

free(p) ;
}

可以通过以下方式解决:
1. 定义unsigned long Length = 10000000;
然后用这个数作为数组长度开辟内存;不要用直接声明数组的方法用这个方法: char *p = new char[Length];最后记得释放delete [] p;
2.也可以通过vector和list用迭代器解决
vector<char>::iterater It;方式
3.直接用string str(1000000,'0');声明,将一个字符输入str或者将STR内的某个字符输出可以通过str[0~~999999整数]来操作