void sort(char *arr[])
{
char temp[50];
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
if(strcmp(arr[i],arr[i+1])>0)
{
strcpy(temp,arr[i]);
strcpy(arr[i],arr[i+1]);
strcpy(arr[i+1],temp);
}
}
}
}
int main()
{
char *arr[] = {"zxe","pzae","cazaae","daanans"};
sort(arr);
for(int i=0; i<4; i++)
{
cout<<arr[i]<<endl;
}
}
我想使用此代码按字母顺序对字符串进行排序,但这似乎不起作用。我想专门为这个任务使用指针。任何线索?
答案 0 :(得分:1)
你只需交换指针,只需从0迭代到2,因为你要与下一个值i+1
进行比较
void sort(char *arr[])
{
char * temp;
for(int j=0; j<3;j++)
{
for(int i=0; i<3;i++)
{
if(strncmp(arr[i],arr[i+1],50)>0)
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
注意:
我使用strncmp
因为它更安全,您可以指定n
:要比较的最大字符数。
答案 1 :(得分:0)
比以前更小的内环。数组大小的参数。
void sort(char *arr[], int size)
{
char * temp;
for(int j=0; j<size-1;j++)
{
for(int i=j+1; i<size; i++)
{
if(strcmp(arr[i],arr[j])>0)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
int main()
{
char *arr[]={"zxe","pzae","cazaae","daanans"};
sort(arr, size);
for(int i=0; i<4;i++)
{
cout<<arr[i]<<endl;
}
}
答案 2 :(得分:0)
对于初学者来说这个宣言
char *arr[] = {"zxe","pzae","cazaae","daanans"};
声明一个指向字符串文字的第一个字符的指针数组。在C ++中,字符串文字具有常量字符数组的类型,因此数组的正确声明应该类似于
const char * arr[] = { "zxe", "pzae", "cazaae", "daanans" };
对数组进行排序意味着重新排列作为指针的数组元素。字符串文字本身将保持不变。您只需要将指针交换为字符串文字而不是字符串文字。此外,字符串文字是不可变的。因此,无论如何,您可能无法在问题中显示的程序中执行您要执行的操作。你可以这样做,如果不是指向字符串文字的指针数组,你使用了二维字符串数组。也就是说,如果数组将被声明为例如
char arr[][8] = { "zxe", "pzae", "cazaae", "daanans" };
您可以使用标准C ++算法std::sort
。例如
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstring>
int main()
{
const char * arr[] = { "zxe", "pzae", "cazaae", "daanans" };
for ( const char *s : arr ) std::cout << s << ' ';
std::cout << std::endl;
std::sort( std::begin( arr ), std::end( arr ),
[]( const char *s1, const char *s2 )
{
return std::strcmp( s1, s2 ) < 0;
} );
for ( const char *s : arr ) std::cout << s << ' ';
std::cout << std::endl;
return 0;
}
程序输出
zxe pzae cazaae daanans
cazaae daanans pzae zxe
如果要使用冒泡排序方法对数组进行排序,则程序可能看起来像
#include <iostream>
#include <utility>
#include <cstring>
void bubble_sort( const char * arr[], size_t n )
{
for ( size_t last; not ( n < 2 ); n = last )
{
for ( size_t i = last = 1; i < n; i++ )
{
if ( std::strcmp( arr[i], arr[i - 1] ) < 0 )
{
std::swap( arr[i], arr[i - 1] );
last = i;
}
}
}
}
int main()
{
const char * arr[] = { "zxe", "pzae", "cazaae", "daanans" };
const size_t N = sizeof( arr ) / sizeof( *arr );
for ( const char *s : arr ) std::cout << s << ' ';
std::cout << std::endl;
bubble_sort( arr, N );
for ( const char *s : arr ) std::cout << s << ' ';
std::cout << std::endl;
return 0;
}
程序输出与上面显示的相同
zxe pzae cazaae daanans
cazaae daanans pzae zxe