gpt4 book ai didi

c - 如何在 C 中进行 char* 数组元素交换?

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:45 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

char* temp=" ";
char char_array[4][100]= {"-11111","-1111","-1110","-1112"};

void str_swap(char** a,char** b);

int main(int argc,char* argv[]) {
int j=0,n=4;

printf("BEFORE str_swap(&char_array[0],&char_array[2]);\n");

for (j=0; j<n; j++) {
printf("char_array[%d] = %s\n",j,char_array[j]);
}


str_swap(&char_array[0],&char_array[2]);


printf("AFTER str_swap(&char_array[0],&char_array[2]);\n");

for (j=0; j<n; j++) {
printf("char_array[%d] = %s\n",j,char_array[j]);
}

return 0;
}

void str_swap(char** str1,char** str2) {
temp = *str1;
*str1 = *str2;
*str2 = temp;
}

大家好:我想在 C 中进行 char* 数组元素交换,上面是我的代码。但是我没有像下面显示的输出那样改变任何东西。我在这里遗漏了什么吗?提前感谢您的帮助。

BEFORE str_swap(&char_array[0],&char_array[2]);
char_array[0] = -11111
char_array[1] = -1111
char_array[2] = -1110
char_array[3] = -1112
AFTER str_swap(&char_array[0],&char_array[2]);
char_array[0] = -11111 //should be -1110
char_array[1] = -1111
char_array[2] = -1110 //should be -11111
char_array[3] = -1112

进程返回 0 (0x0) 执行时间:0.359 秒
按任意键 继续。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 1002
char *char_array[MAXLEN];
void str_swap(char const** str1,char const** str2);
int my_compare_func(int,int);
void bubble_sort(int,int(*compare_func)(int,int));

int main(int argc,char* argv[]) {
int n=0,i=0,j=0;
while(scanf("%d",&n)==1) {
i=n;
while(i--) {
scanf("%s",&char_array[i]);
}
printf("BEFORE BULLE SORT\n");
for (j=0; j<n; j++) {
printf("j = %d\n",j);
printf("char_array[%d] = %s\n",j,&char_array[j]);
//printf("char_array[%d] = %s\n",j,char_array[j]);
}
bubble_sort(n,my_compare_func);
printf("AFTER BULLE SORT\n");
for (j=0; j<n; j++) {
printf("j = %d\n",j);
printf("char_array[%d] = %s\n",j,&char_array[j]);
//printf("char_array[%d] = %s\n",j,char_array[j]);
}
system("PAUSE");
}
return 0;
}

int my_compare_func(int x,int y) {
int i=0,res = 0,len_strx=0,len_stry=0;
len_strx = strlen(char_array[x]);
len_stry = strlen(char_array[y]);
if(char_array[x][0]=='-') {
if(char_array[y][0]=='-') {
if(len_strx>len_stry) {
res = -1;
}else if(len_strx<len_stry) {
res = 1;
}else if(len_strx==len_stry) {
i=1;
while((char_array[x][i]==char_array[y][i])&&(char_array[x][i]!='\0')&&(char_array[y][i]!='\0')) {
++i;
}
if(i==len_strx) {
res = 0;
}else if(char_array[x][i]<char_array[y][i]){
res = 1;
}else if(char_array[x][i]>char_array[y][i]) {
res = -1;
}
}
}else if((char_array[y][0]>='0'&&char_array[y][0]<='9')||char_array[y][0]=='+'){
res = -1;
}
}else if((char_array[x][0]>='0'&&char_array[x][0]<='9')||char_array[x][0]=='+') {
if((char_array[y][0]>='0'&&char_array[y][0]<='9')||char_array[y][0]=='+'){
if(len_strx>len_stry) {
res = 1;
}else if(len_strx<len_stry) {
res = -1;
}else if(len_strx==len_stry) {
i=0;
while(char_array[x][i]==char_array[y][i]&&char_array[x][i]!='\0'&&char_array[y][i]!='\0') {
++i;
}
if(i==len_strx) {
res = 0;
}else if(char_array[x][i]<char_array[y][i]){
res = -1;
}else if(char_array[x][i]>char_array[y][i]){
res = 1;
}
}
}else if(char_array[y][0]=='-') {
res = 1;
}
}
return res;
}

void str_swap(char const** str1,char const** str2) {
char const* temp = *str1;
*str1 = *str2;
*str2 = temp ;
}

void bubble_sort(int n,int(*compare_func)(int x,int y)) {
int i=0,j=0,flag=1;
for(i=n-1; (i>0)&&(flag==1); --i) {
flag=0;
for(j=0; j<i; ++j) {
if(compare_func(j,j+1)>0) {
str_swap(&char_array[j],&char_array[j+1]);
flag = 1;
}
}
if(!flag) {
break;
}
}
}

Thank you for all the answers.Your response is very fast.In fact I am trying to solve the basic online judge problem.Check it here:(in mandarin) http://zerojudge.tw/ShowProblem?problemid=a528
Basically it's a sorting problem with string storing big number(both positive and negative).Sorry for posting such huge amount lines of code.fast.My new problem is that while I have my code running to the line:
//printf("char_array[%d] = %s\n",j,&char_array[j]);
printf("char_array[%d] = %s\n",j,char_array[j]);
then the console application crashed!I tried some approach like the commented line(that is,set the %s part in printf() function to be &char_array[j]).It works fine but contradicts my knowledge about arguments > of printf().Can anyone explain this for me?Thanks :)

最佳答案

是的,您在这里遗漏了一些东西。 char [4][100] 是一个数组数组,而不是一个指针数组。您的函数需要指针的地址,而不是数组的地址(数组不是指针)。

将您的数组更改为 const char* 数组(指向常量 char 数据的指针),并且您的函数正确地将指针交换为该类型的指针将解决您的问题。

#include <stdio.h>
#include <stdlib.h>

char const *char_array[4] = {"-11111","-1111","-1110","-1112"};

void str_swap(char const ** str1,char const ** str2);

int main(int argc,char* argv[])
{
int j=0,n=4;

printf("BEFORE str_swap(&char_array[0],&char_array[2]);\n");

for (j=0; j<n; j++) {
printf("char_array[%d] = %s\n",j,char_array[j]);
}


str_swap(&char_array[0], &char_array[2]);


printf("AFTER str_swap(&char_array[0],&char_array[2]);\n");

for (j=0; j<n; j++) {
printf("char_array[%d] = %s\n",j,char_array[j]);
}

return 0;
}

void str_swap(char const ** str1, char const ** str2)
{
char const *temp = *str1;
*str1 = *str2;
*str2 = temp;
}

输出

BEFORE str_swap(&char_array[0],&char_array[2]);
char_array[0] = -11111
char_array[1] = -1111
char_array[2] = -1110
char_array[3] = -1112
AFTER str_swap(&char_array[0],&char_array[2]);
char_array[0] = -1110
char_array[1] = -1111
char_array[2] = -11111
char_array[3] = -1112

您的原始代码如何运行是个谜,因为我使用的任何 C 编译器都不允许您正在做的事情进行编译,更不用说运行了。

关于c - 如何在 C 中进行 char* 数组元素交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37452590/

25 4 0
文章推荐: c - 这个递归函数是如何倒序输出字符的?
文章推荐: java - 使用 JSch 执行源命令
文章推荐: python - 如何将 python datetime(ISO) 截断为小时?
文章推荐: html - 如何去除背景图像中的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com