//C Primer Plus
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout (char *fstr[],int num);
void str_ascout (char *fstr[],int num);
void str_lenout (char *fstr[],int num);
void str_wordout (char *fstr[],int num);
int main (void)
{
char str[LIM][SIZE]; //char
char * ptstr[LIM];
char ch = ""N"";
int i,j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != ""Y"")
{
while(i < LIM) //
gets(str[i]);
for(j = 0;j < strlen(str[i]);j++) //
{
if (str[i][j] == EOF)
{
is_EOF = 1;
break; //break
}
}
ptstr[i] = str[i];
i++;
if (is_EOF == 1)
break;
puts(str[i]);
puts(ptstr[i]);
}
str_oriout(ptstr,i);
str_ascout(ptstr,i);
str_lenout(ptstr,i);
str_wordout(ptstr,i);
printf("Enter ""Y"" to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout (char *fstr[],int num) //
{
int ct = 0;
for (ct = 0;ct < num;ct++)
puts(fstr[ct]);
}
void str_ascout (char *fstr[],int num) //
{
char *temp;
int top,seek;
for (top = 0;top < num - 1;top++)
for (seek = top + 1;seek < num;seek++)
if (strcmp(fstr[top],fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_lenout (char *fstr[],int num)
{
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_wordout (char *fstr[],int num) //
{
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i,j;
int count1,count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != ""\0"")
{count1++;
i++;}
while (fstr[seek][j] != ""\0"")
{count2++;
j++;}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
|
|
|
//°′ê××???ASCII?μμ??3Dòê?3?×?·?′?
汉字注释全成了乱码!谁能解释下? |
|
|
大一,上学期开的C,没学到什么,于是自学C Primer Plus,到了第11章字符串和字符串函数,卡在这里了。章末的程序题花我很长时间,这道题已使我用了一天或者更久。这样学习,是不是效率太低不可取?
|
|
| 25分 |
第二个while后面少了一个”{“;导致程序有错,加个“{”吧。然后再调调看。
while(i < LIM) 后加”{“. |
|
那个是编辑的时候打掉的了的,这样的错误,编译器可以检查出。 |
|
|
[code=c //C Primer Plus
#include <stdio.h> int main (void) printf(“Please enter 10 strings\n”); ptstr[i] = str[i]; printf(“Enter “”Y”” to get out!\n”); } void str_ascout (char *fstr[],int num) // void str_lenout (char *fstr[],int num) for (top = 0; top < num-1; top++) for (top = 0;top < num;top++) void str_wordout (char *fstr[],int num) // for (top = 0; top < num-1; top++) for (top = 0;top < num;top++) |
|
//第11章第10题 //C Primer Plus
//输入10个字符串,按不同要求排序输出
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout (char *fstr[],int num);
void str_ascout (char *fstr[],int num);
void str_lenout (char *fstr[],int num);
void str_wordout (char *fstr[],int num);
int main (void)
{
char str[LIM][SIZE]; //char *str[LIM] ,输入存在问题,一次只能输入一行
char * ptstr[LIM]; //注意声明!
char ch = ""N"";
int i,j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != ""Y"")
{
while(i < LIM) //输入10个字符串或遇到EOF结束
{
gets(str[i]);
ptstr[i] = str[i];
for(j = 0;j < strlen(str[i]);j++) //遇到EOF停止
{
if (ptstr[i][j] == EOF)
{
is_EOF = 1;
break; //break
}
}
i++;
if (is_EOF == 1)
break;
puts(str[i]);
printf("******1\n"); //检查作用
puts(ptstr[i]);
printf("******2\n");
}
str_oriout(ptstr,i);
str_ascout(ptstr,i);
str_lenout(ptstr,i);
str_wordout(ptstr,i);
printf("Enter ""Y"" to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout (char *fstr[],int num) //输出初始字符串
{
printf("******1\n");
int ct = 0;
for (ct = 0;ct < num;ct++)
puts(fstr[ct]);
}
void str_ascout (char *fstr[],int num) //按首字母ASCII值的顺序输出字符串
{
printf("******2\n");
char *temp;
int top,seek;
for (top = 0;top < num - 1;top++)
for (seek = top + 1;seek < num;seek++)
if (strcmp(fstr[top],fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_lenout (char *fstr[],int num) //按数组长度排序
{
printf("******3");
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_wordout (char *fstr[],int num) //按第一个单词的长度排序
{
printf("******4");
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i,j;
int count1,count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != ""\0"")
{count1++;
i++;}
while (fstr[seek][j] != ""\0"")
{count2++;
j++;}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
|
|
| 5分 |
修改如下:
//第11章第10题 //C Primer Plus
//输入10个字符串,按不同要求排序输出
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout(char *fstr[], int num);
void str_ascout(char *fstr[], int num);
void str_lenout(char *fstr[], int num);
void str_wordout(char *fstr[], int num);
int main(void)
{
char str[LIM][SIZE]; //char *str[LIM] ,输入存在问题,一次只能输入一行
char * ptstr[LIM]; //注意声明!
char ch = ""N"";
int i, j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != ""Y"")
{
while (i < LIM) //输入10个字符串或遇到EOF结束
{
gets(str[i]);
ptstr[i] = str[i];
for (j = 0; j < strlen(str[i]); j++) //遇到EOF停止
{
if (ptstr[i][j] == EOF)
{
is_EOF = 1;
break; //break
}
}
if (is_EOF == 1)
break;
puts(str[i]);
printf("******1\n"); //检查作用
puts(ptstr[i]);
printf("******2\n");
i++;
}
str_oriout(ptstr, i);
str_ascout(ptstr, i);
str_lenout(ptstr, i);
str_wordout(ptstr, i);
printf("Enter ""Y"" to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout(char *fstr[], int num) //输出初始字符串
{
printf("******1\n");
int ct = 0;
for (ct = 0; ct < num; ct++)
puts(fstr[ct]);
}
void str_ascout(char *fstr[], int num) //按首字母ASCII值的顺序输出字符串
{
printf("******2\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
if (strcmp(fstr[top], fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}
void str_lenout(char *fstr[], int num) //按数组长度排序
{
printf("******3\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}
void str_wordout(char *fstr[], int num) //按第一个单词的长度排序
{
printf("******4\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i, j;
int count1, count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != ""\0"")
{
count1++;
i++;
}
while (fstr[seek][j] != ""\0"")
{
count2++;
j++;
}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}
|
|
何不改成getchar()输入呢?
|
|
//第11章第10题
//输入10个字符串,按不同要求排序输出
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout (char *fstr[],int num);
void str_ascout (char *fstr[],int num);
void str_lenout (char *fstr[],int num);
void str_wordout (char *fstr[],int num);
int main (void)
{
char str[LIM][SIZE]; //char *str[LIM] ,输入存在问题,一次只能输入一行
char * ptstr[LIM]; //注意声明!
char ch = ""N"";
int i,j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != ""Y"")
{
ch = getchar();
while (i < LIM && ch != EOF)
//while (ch = getchar() && i < LIM && ch != EOF)出错,为何??
{
if (ch == ""\n"")
{
str[i][j] = ""\0"";
ptstr[i] = str[i];
i++;
j = 0;
}
else
{
str[i][j] = ch;
j++;
}
ch = getchar();
}
str_oriout(ptstr,i);
str_ascout(ptstr,i);
str_lenout(ptstr,i);
str_wordout(ptstr,i);
i = 0;
j = 0;
printf("Enter ""Y"" to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout (char *fstr[],int num) //输出初始字符串
{
printf("******************1\n");
int ct = 0;
for (ct = 0;ct < num;ct++)
puts(fstr[ct]);
}
void str_ascout (char *fstr[],int num) //按首字母ASCII值的顺序输出字符串
{
printf("******************2\n");
char *temp;
int top,seek;
for (top = 0;top < num - 1;top++)
for (seek = top + 1;seek < num;seek++)
if (strcmp(fstr[top],fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_lenout (char *fstr[],int num) //按数组长度排序
{
printf("*******************3\n");
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_wordout (char *fstr[],int num) //按第一个单词的长度排序
{
printf("**********************4\n");
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i,j;
int count1,count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != ""\0"")
{count1++;
i++;}
while (fstr[seek][j] != ""\0"")
{count2++;
j++;}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
|
|
|
最终还是自己解决问题,也不会在发帖请人帮忙解决具体问题了,但希望人们能教给我方法和知识。
|
|