|  | 
 
| 
题目:从键盘输入一个字符串,然后提取其中的数字字符,将其排列在其他字符之后。列如输入字符串this7is#@hg,排列后的结果为thisis$@hg789。要求字符串的操作有指针法实现。
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 
 这个是我的源代码不知道哪里错了或者逻辑错误
 #include<stdio.h>
 
 int main()
 {
 char a[100];
 char *j;
 void swap(char *p,int n); // 定义一个让数字交换的函数
 int b ,k;
 gets(a);       //获得a数组的字符
 j = a;
 b = 0;
 for(k = 0 ; *(j + k) != '\0';k++)
 {
 
 b++;       //计算a数组输入的长度
 }
 swap(j , b);
 for(k = 0 ; k <=b ; k++)
 {
 printf("%c",*(j + k));   //将交换的字符数组进行输出
 }
 }
 
 void swap(char *p, int n)
 {
 char temp;
 int j ,k ;
 for(j = 0 ; j < n; j++)
 {
 for(k = 0 ; k < n - j; k++)  //利用类似气泡式的求法进行交换
 {
 
 if(*(p + k)>'0' && *(p + k)<'9')
 {
 temp = *(p + k);
 *(p + k ) = *(p + k + 1);     //一个一个往后挪动
 *(p + k + 1 ) = temp;
 
 }
 }
 }
 }
 
 这个是运行结果:
 this7is89@#hg
 thisis@#hg 987
 Process returned 0 (0x0)   execution time : 11.617 s
 Press any key to continue.
 
 该如何进行改进将那个9前面的空格去掉  求各位大佬指点指点
 
 本帖最后由 bin554385863 于 2019-11-16 13:24 编辑 
复制代码#include <stdio.h>
#include <ctype.h>
#include <string.h>
char *strswap(char *str, char *ptr) //str是要处理的字符串, ptr用来保存最终结果
{
    char dstr[100] = {'\0'}; //保存数字字符
    char cstr[255] = {'\0'}; //保存其他字符
    int count_d = 0, count_s = 0;
    for (char *i = str; *i != '\0'; i++)
    {
        if (isdigit(*i))
        {
            dstr[count_d] = *i;
            dstr[count_d+1] = '\0';
            count_d++;
        }
        if (!isdigit(*i))
        {
            cstr[count_s] = *i;
            count_s++;
        }
    }
    strcpy(ptr, cstr);
    strcat(ptr, dstr);
    return ptr;
}
int main()
{
    char str[100] = {'\0'};
    char ptr[100];
    scanf("%s", str);
    printf("%s", strswap(str, ptr));
}
----------------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476] (c) 2019 Microsoft Corporation。保留所有权利。
 
 E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-g4zw5ubg.qdp --stdout=Microsoft-MIEngine-Out-p5vusv2z.1x2 --stderr=Microsoft-MIEngine-Error-jnieekme.vlc --pid=Microsoft-MIEngine-Pid-sg2lylo3.inu --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
 @#6a5$^5@8456fa5g
 @#a$^@fag65584565
 E:\Users\admin\Documents\VScode>cmd /C "c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-ze5m2hay.0jj --stdout=Microsoft-MIEngine-Out-ynus4vyd.gme --stderr=Microsoft-MIEngine-Error-k1ialc05.5si --pid=Microsoft-MIEngine-Pid-1rvgxj0s.znz --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi "
 a5f45a45s4fdsd6f46
 afasfdsdf545454646
 E:\Users\admin\Documents\VScode>
 | 
 |