注册 登录
编程论坛 C语言论坛

对字符串进行倒序排序

hffjhhh 发布于 2020-06-13 22:59, 1854 次点击
对字符串进行倒序排序,运行时在输入完字符串后就无法正常运行,是什么原因?代码如下:
程序代码:
#include"stdio.h"
#define QW "quit"
char *ar(char *p){
    char *q;
    int i;
    i=1;
    for(*(p+strlen(p)-i);*p;q++,i++)
        *q=*(p+strlen(p)-i);
    *q='\0';
    return q;
}
int main(void){
    char *t;
    char *w;
    t=(char *)malloc(sizeof(char)*100);
    printf("输入字符串:");
    while(strcmp(gets(t),QW)){
        w=ar(t);
        printf("%s\n",w);
        printf("输入字符串:");
    }
    return 0;
}
6 回复
#2
ditg2020-06-13 23:59
程序代码:
#include <stdio.h>

#define MAX_LEN 4096

int main(void)
{
    char c, s[MAX_LEN] = {0}, *sp;

    for (sp = s; (c = getchar()) != '\n' && c != EOF; *sp++ = c);
    for (; --sp >= s; putchar(*sp));
    printf("\n");
}
#3
hffjhhh2020-06-14 20:05
以下是引用ditg在2020-6-13 23:59:06的发言:

#include <stdio.h>

#define MAX_LEN 4096

int main(void)
{
    char c, s[MAX_LEN] = {0}, *sp;

    for (sp = s; (c = getchar()) != '\n' && c != EOF; *sp++ = c);
    for (; --sp >= s; putchar(*sp));
    printf("\n");
}

这份代码只能对字符进行倒序排序,而且输入输出都是字符的形式,我要求用字符串的形式进行输入输出.在循环中将字符串传递给函数,并且在函数中进行。

[此贴子已经被作者于2020-6-14 20:06编辑过]

#4
hffjhhh2020-06-14 23:53
以下是引用hffjhhh在2020-6-13 22:59:36的发言:

对字符串进行倒序排序,运行时在输入完字符串后就无法正常运行,是什么原因?代码如下:
#include"stdio.h"
#define QW "quit"
char *ar(char *p){
    char *q;
    int i;
    i=1;
    for(*(p+strlen(p)-i);*p;q++,i++)
        *q=*(p+strlen(p)-i);
    *q='\0';
    return q;
}
int main(void){
    char *t;
    char *w;
    t=(char *)malloc(sizeof(char)*100);
    printf("输入字符串:");
    while(strcmp(gets(t),QW)){
        w=ar(t);
        printf("%s\n",w);
        printf("输入字符串:");
    }
    return 0;
}

运行时在输入完字符串后就无法正常运行,是什么原因?
#5
fulltimelink2020-06-15 07:09
for没操作p,会死循环
程序代码:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define QW "quit"
char * gets(char *);
char *ar(char *p) {
    char *begin = p;
    char *last = p + strlen(p)-1;
    while (begin < last) {
        char temp = *last;
        *last = *begin;
        *begin = temp;
        begin++;
        last--;
    }
    return p;
}
int main(void) {
    char *t;
    char *w;
    t = (char *)malloc(sizeof(char) * 100);
    printf("输入字符串:");
    while (strcmp(gets(t), QW)) {
        w = ar(t);
        printf("%s\n", w);
        printf("输入字符串:");
    }
    free(t);
    return 0;
}


[此贴子已经被作者于2020-6-15 14:17编辑过]

#6
hffjhhh2020-06-15 20:36
回复 5楼 fulltimelink
我将函数改为这样:这时for循环不需要判断p,只需要判断i<=j.就可以结束循环,但不知为何仍然无法实现倒序输出?
程序代码:
char *ar(char *p){
    char *q;
    q=(char *)malloc(sizeof(char)*100);
    int i,j;
    j=strlen(p);
    for(i=1;i<=j;q++,i++){
        *q=*(p+j-i);
    }
    *q='\0';
    return q;
}
#7
fulltimelink2020-06-16 10:54
回复 6楼 hffjhhh
[s]返回谁,就别动谁[/s]   (这个说法不准)
程序代码:

char *ar(char *p) {
    char *q;
    q = (char *)malloc(sizeof(char) * 100);
    char *qq = q;
    int i, j;
    j = strlen(p);
    for (i = 1; i <= j; qq++, i++) {
        *qq = *(p + j - i);
    }
    *qq = '\0';
    return q;
}



程序代码:

char *ar(char *p) {
    char *q;
    q = (char *)malloc(sizeof(char) * 100);
    int i, j;
    j = strlen(p);
    for (i = 1; i <= j; q++, i++) {
        *q = *(p + j - i);
    }
    *q = '\0';
    q -= j;
    return q;
}


[此贴子已经被作者于2020-6-16 13:15编辑过]

1