关于网友提出的“ 大家帮我看看,谢谢”问题疑问,本网通过在网上对“ 大家帮我看看,谢谢”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 大家帮我看看,谢谢
描述: 先描述一下问题:我做的是输入10行字符串,然后按字母顺序每行排列好,为了练习指针数组的函数调用所以这里用了指针数组,当然只用一个二维数组也是可以的.
现在的主要问题是我想输入exit时结束输入,直接排序,现在的程序却一定要全输入完.
还有就是我的排序循环效率不高,望高手指导.
#include
#include
#include
#define MAX 10
char *SomeString[MAX];
char InputString();
char SortString(char *ptr[]);
int main (void)
{
InputString();
SortString(SomeString);
free(SomeString);
system("PAUSE");
return 0;
}
char InputString()
{
int i=0;
printf("Enter string.Enter exit to quit.\n");
for (i=0;i<>
{
SomeString[i] = malloc(26*sizeof(char));//分配空间
if (SomeString[i] == NULL)
{
puts("No enough memory.");
return 1;
}
}
for (i=0;i<>
{
scanf("%s", SomeString[i]);//输入字符串
if(SomeString[i]=="exit")//本来想判断输入EXIT就退出的,现在不灵了。大家看看
return;
}
return;
}
char SortString(char *ptr[])
{
int i,j=0,k=1;
char TempString[MAX][26];
char Temp;
for (i=0;i<>
{
int m=0;
strcpy(TempString[i],ptr[i]); //把指针数组的内容复制到二维数组中
while(TempString[i][m]!='\0')
{
m++; // 计算字符串长度
}
for(j=0;j
for(k=j+1;k<>
{
if(TempString[i][j]>TempString[i][k])
{
Temp=TempString[i][j];
TempString[i][j]=TempString[i][k];
TempString[i][k]=Temp;
}
}
printf("%s\n",TempString[i]);
}
return;
}
解决方案1: #include
#include
#include
#define MAX 10
char *SomeString[MAX];
int count=0;
bool InputString();
void SortString(char *ptr[],int n);
void printString(char *ptr[],int n);
int main (void)
{
InputString();
SortString(SomeString,count);
printString(SomeString,count);
for(int i=0;i<>
free(SomeString[i]);
system("PAUSE");
return 0;
}
bool InputString()
{
int i;
printf("Enter string.Enter exit to quit.\n");
for (i=0;i<>
{
SomeString[i] = (char*)malloc(26*sizeof(char));
if (SomeString[i] == NULL)
{
puts("No enough memory.");
exit(0);
}
scanf("%s", SomeString[i]);
if(!strcmp(SomeString[i],"exit"))
{
free(SomeString[i]);
SomeString[i]=0;
return false;
}
count++;
}
return true;
}
void SortString(char *ptr[],int n)
{
int i,k;
char* Temp;
for (i=1;i<>
{
for(k=i;k<>
{
if(strcmp(ptr[k-1],ptr[k])>0)
{
Temp=ptr[k-1];
ptr[k-1]=ptr[k];
ptr[k]=Temp;
}
}
}
}
void printString(char *ptr[],int n)
{
for(int i=0;i<>
{
printf("%s\n",ptr[i]);
}
}
我给LZ改了一下,LZ的程序错误好多,可能改动有些大,主要是参数方面的,给你多了一个字符串个数的参数,你的排序也有很大的问题,也给你改了
解决方案2: for (i=0;i<>
{
scanf("%s", SomeString[i]);
if(strcmp(SomeString[i],"exit")==0) //比较字符串
return;
}
解决方案3: if(SomeString[i]=="exit")//本来想判断输入EXIT就退出的,现在不灵了。大家看看
-------------------------------
这个格式用在string类型是可以的,但用在char*就不可以了。
这里比较的是两个指针,比较指针指向的字符串的话要使用strcmp(SomeString[i],"exit"),
以上介绍了“ 大家帮我看看,谢谢”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3028948.html