问题链接PIPIOJ
思路:多组输入字符串(数组),交换指定两行字符串的方法通过swap和strcpy实现(c语言没有alth库需要定义函数swap)。注意:数组大小不能太小否则会数组越界,段错误。
代码如下:
#include <stdio.h>
#include <string.h>
void swap(char *a1,char*a2){
char c[100];
strcpy(c,a1);
strcpy(a1,a2);
strcpy(a2,c);
}
int main(){
int n,m;
scanf("%d %d\n",&n,&m);
char arr[100000][100]={0};
for(int i=0;i<n;i++){
gets(arr[i]);
}
for(int i=1;i<=m;i++){
int n1,n2;
scanf("%d %d",&n1,&n2);
swap(arr[n1-1],arr[n2-1]);
}
for(int i=0;i<n;i++){
printf("%s\n",arr[i]);
}
return 0;
}
你题目是什么
char arr[100000][100]={0};
arr数组太大了
函数内局部变量的数组长度不能太大
改成全部变量的数组即可.
或者用 malloc()动态分配内存空间
局部变量是在程序运行栈上自动分配的,一般运行栈的大小是比较小的,大约即1~2MB,如果你定义一个很大的局部变量,很可能导致栈溢出。
而全局变量是在数据段中在程序加载时自动分配,大小可以定义的很大,只要你的电脑内存足够大。
你题目的解答代码如下:
#include <stdio.h>
#include <string.h>
void swap(char *a1,char*a2){
char c[100];
strcpy(c,a1);
strcpy(a1,a2);
strcpy(a2,c);
}
char arr[100000][100]={0};//改成全局变量
int main(){
int n,m;
scanf("%d %d\n",&n,&m);
for(int i=0;i<n;i++){
gets(arr[i]);
}
for(int i=1;i<=m;i++){
int n1,n2;
scanf("%d %d",&n1,&n2);
swap(arr[n1-1],arr[n2-1]);
}
for(int i=0;i<n;i++){
printf("%s\n",arr[i]);
}
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!