求大神协助:调用getString函数将该英文句子读入二维字符数组,然后调用函数sort,利用选择或冒泡算法对上述句子中的单词进行排序(按字母序)
知识点:函数,数组、文件综合练习创建用户库strpro.h和openfile.h,其中strpro.h中包含getString、sort和read函数,而openfile.h中包含openw函数。
在main函数中提示用户输入一句话,要求:
1. 调用getString函数将该英文句子读入二维字符数组,然后调用函数sort,利用选择或冒泡算法对上述句子中的单词进行排序(按字母序)。
2. 将排好序的句子写入到磁盘文件data.txt中。要求打开data.txt文件的操作须调用openw函数完成,打开时须检查同名文件是否存在,并提示用户是否覆盖原文件。
3. 调用函数read将data.txt中的内容读回显示到屏幕上。
问题:冒泡有问题,闪退。
代码如下:
#pragma once
#define LSIZE 81
char string[][LSIZE] = { 0 };
int getString();
void sort();
void read();
int i = 0,j = 0;
int getString()
{
char c;
while ((c = getchar()) != '\n')
{
if (c == ' ')
{
i++;
j = 0;
}
else
{
string[i][j] = c;
j++;
}
}
j = 0;
printf("%d\n", i);
return (i);
}
void sort()
{
char temString[LSIZE] = {0};
int a, b, c;
for (a=0;a<i;a++)
{
b = a;
for (c=a+1;c<i+1;c++)
{
if (strcmp(string[b], string[c]) > 0)
b = c;
if (b != a)
{
strcpy_s(temString, LSIZE, string[a]);
strcpy_s(string[a], LSIZE, string[b]);
strcpy_s(string[b], LSIZE, temString);
}
}
}
}
void read()
{
FILE* fp;
char str[LSIZE] = {'\0'};
fp = fopen("data.txt", "r");
while (fscanf(fp, "%s", str) != EOF)
puts(str);
fclose(fp);
}