c语言查找数字并排序编程代码

img


.给定任意字符串,查找出数字字符,并按从小到大顺序排列输出(20分)(容易,适中偏难,困难
1)要求实现函数:
void GetNumString(const char *inputchar *output)输入:constchar *input,原始字符串

基于new bing的实现:

img

#include <stdio.h>
#include <string.h>

void GetNumString(const char *input, char *output) {
    int len = strlen(input), count = 0;
    char nums[100] = {0};

    // 找到所有数字字符
    for (int i = 0; i < len; i++) {
        if (input[i] >= '0' && input[i] <= '9') {
            nums[count++] = input[i];
        }
    }

    // 冒泡排序,按从小到大排序
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - i - 1; j++) {
            if (nums[j] > nums[j+1]) {
                char temp = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = temp;
            }
        }
    }

    // 将结果输出到 output 中
    for (int i = 0; i < count; i++) {
        output[i] = nums[i];
    }
    output[count] = '\0';
}
int main() {
    char input[] = "ab2c1d4e6f5g7h8i9j";
    char output[100] = {0};
    GetNumString(input, output);
    printf("Input: %s\nOutput: %s\n", input, output);

    return 0;
}


人工作答,非GPT,如有帮助望采纳,谢谢。
运行结果:

img

C语言代码:

#include <stdio.h>

void GetNumString(const char *input,char *output)
{
    char nmb[10]={0}; //数字字符0-9的个数
    int i=0,j=0;
    int index = 0;
    char t;
    for(i=0;input[i]!='\0';i++)
        output[i] = input[i];
    output[i] = 0;
    //处理
    for(i=0;output[i]!='\0';i++)
    {
        if(output[i]>='0' && output[i]<='9')
        {
            //数字字符,从i位置找比它小的字符
            index = i;
            for(j=i+1;output[j]!='\0';j++)
            {
                if(output[j]>='0' && output[j]<='9' && output[j]<output[index])
                    index = j;
            }
            if(index != i) //说明找到比input[i]小的数字字符
            {
                //交换i和index
                t = output[i];
                output[i] = output[index];
                output[index] = t;
            }
        }
    }
}

int main()
{
    char buf[100]={0};
    char dst[100]={0};
    printf("请输入一个字符串:\n");
    gets(buf);
    GetNumString(buf,dst);
    printf("处理后的字符串:\n");
    printf("%s",dst);
    return 0;
}

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

void GetNumString(const char *input)
{
    int len = strlen(input);
    char *numstr = malloc(len * sizeof(char));
    int num_count = 0;

    for (int i = 0; i < len; i++)
    {
        if (isdigit(input[i]))
        {
            numstr[num_count++] = input[i];
        }
    }
    
    for (int i = 0; i < num_count - 1; i++)
    {
        for (int j = i + 1; j < num_count; j++)
        {
            if (numstr[i] > numstr[j])
            {
                char temp = numstr[i];
                numstr[i] = numstr[j];
                numstr[j] = temp;
            }
        }
    }
    
    for (int i = 0; i < num_count; i++)
    {
        printf("%c ", numstr[i]);
    }

    free(numstr);
}

int main(void)
{
    char input[100];
    scanf("%s", input);

    GetNumString(input);

    return 0;
}

根据题目描述,需要编写一个函数 GetNumString,该函数接收一个指向原始字符串的指针 input,和一个指向输出字符串的指针 output。该函数应该找出输入字符串中的数字字符,并按从小到大的顺序排列输出到 output 中。
可以使用正则表达式来匹配数字字符,并使用 STL 中的 vector 容器来存储结果。参考下面简单代码示例:

#include <iostream>  
#include <string>  
#include <vector>  
#include <regex>  
  
void GetNumString(const char *input, char *output) {  
    std::vector<std::string> nums;  
    std::regex re("\\d+");  
    std::string in = std::string(input);  
    for (std::sregex_iterator it(in.begin(), in.end(), re), end; it != end; ++it) {  
        nums.push_back(it->str());  
    }  
    int n = nums.size();  
    for (int i = 0; i < n; i++) {  
        int len = nums[i].size();  
        int j = 0;  
        while (j < len && nums[i][j] != ' ') {  
            output[i * len + j] = nums[i][j];  
            j++;  
        }  
        while (j < len) {  
            output[i * len + j] = ' ';  
            j++;  
        }  
    }  
    output[n * len] = '\0';  
}  
  
int main() {  
    char input[] = "abc123def 456";  
    char output[50];  
    GetNumString(input, output);  
    std::cout << output << std::endl; // 输出:123 456  
    return 0;  
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void GetNumString(const char *input)
{
    int len = strlen(input);
    char *numstr = malloc(len * sizeof(char));
    int num_count = 0;
    for (int i = 0; i < len; i++)
    {
        if (isdigit(input[i]))
        {
            numstr[num_count++] = input[i];
        }
    }
    for (int i = 0; i < num_count - 1; i++)
    {
        for (int j = i + 1; j < num_count; j++)
        {
            if (numstr[i] > numstr[j])
            {
                char temp = numstr[i];
                numstr[i] = numstr[j];
                numstr[j] = temp;
            }
        }
    }
    for (int i = 0; i < num_count; i++)
    {
        printf("%c ", numstr[i]);
    }
    free(numstr);
}
int main(void)
{
    char input[100];
    scanf("%s", input);
    GetNumString(input);
    return 0;
}

问题已解决, 创作不易给个采纳哦 , 需要详细分析,告诉我哈
运行结果如下

img


代码如下 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
void GetNumString(const char *input)
{
    int len = strlen(input);
    char *numstr = malloc(len * sizeof(char));
    int num_count = 0;
 
    for (int i = 0; i < len; i++)
    {
        if (isdigit(input[i]))
        {
            numstr[num_count++] = input[i];
        }
    }
    
    for (int i = 0; i < num_count - 1; i++)
    {
        for (int j = i + 1; j < num_count; j++)
        {
            if (numstr[i] > numstr[j])
            {
                char temp = numstr[i];
                numstr[i] = numstr[j];
                numstr[j] = temp;
            }
        }
    }
    
    for (int i = 0; i < num_count; i++)
    {
        printf("%c ", numstr[i]);
    }
 
    free(numstr);
}
 
int main(void)
{
    char input[100];
    scanf("%s", input);
 
    GetNumString(input);
 
    return 0;
}

采用C语言,如下所示,有问题可以私聊

#include <stdio.h>
#include <string.h>

void GetNumString(const char *input,char *output)
{
    int i=0,j=0;
    char temp;
    

    //首先从字符串中将数字字符提取出来
    for(i=0;i<strlen(input);i++)
    {
        //首先从字符串中将数字字符提取出来
        if(input[i]>='0'&&input[i]<='9')
        {
            output[j]=input[i];
            j++;
           // printf("111%c\n",output[j]);
        }
    }
    output[i]='\0';//字符串最后一个字符为\0
    //采用冒泡法进行数字字符的排序

    for(i=0;i<strlen(output)-1;i++)
    {
        for(j=0;j<strlen(output)-1-i;j++)
        {
            if(output[j]>output[j+1])
            {
                temp=output[j];
                output[j]=output[j+1];
                output[j+1]=temp;
            }
        }
    }
}

int main()
{
    char in[50]="tad0dfa9da6dfa2de8dfg6da3daf1dg2dga56ad112";
    char out[50]={0};
    GetNumString(in,out);
    printf("%s\n",out);
}

运行效果截图

img


#include<stdio.h>
int k;
void GetNumString(const char* input,char* output){
    int number[10] = { 0 };
    for (int i = 0;input[i] != '\0';i++) {
        int mun = input[i] - '0';
        if (mun>= 0 || mun<= 9) {
            number[mun]++;
        }
    }
    for (int i = 0;i < 10;i++) {
        if (number > 0) {
            for (int j = 0;j < number[i];j++) {
                output[k] =i+'0';
                k++;
            }
        }
    }
}
int main()
{
    char input[100],output[100];
    gets(input);
    GetNumString(input, output);
    for (int i = 0;i < k;i++) {
        printf("%c", output[i]);
    }
    return 0;
}

/*冒泡排序*/
void show(int *,int);
void maopao(int *array,int size)
{
    int i = 0,j = 0,tamp;
    for(i = 0;i < size; i++)
    {
        for(j = 0;j < size; j++)
        {    
            if( array[i] < array[j] )
            {
                tamp = array[i];
                array[i] = array[j];
                array[j] = tamp;
            }
        }
    }
}
void show(int *s,int size)
{
    int i=0;
    for(i = 0;i < size; i++)
    {
        printf("%d ",s[i]);
    }
    printf("\n");
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void GetNumString(const char *input, char *output) {
    int len = strlen(input);
    int index = 0; // 记录output数组中已存放数字字符的个数
    for (int i = 0; i < len; i++) {
        if (isdigit(input[i])) {
            output[index++] = input[i];
        }
    }
    output[index] = '\0'; // 字符串结尾
    qsort(output, index, sizeof(char), strcmp); // 排序
}
int main() {
    char input[100], output[100];
    printf("请输入任意字符串:");
    fgets(input, 100, stdin);
    GetNumString(input, output);
    printf("数字字符按从小到大顺序排列输出:%s\n", output);
    return 0;
}

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void GetNumString(const char *input, char *output) {
    int len = strlen(input);
    int index = 0; // 记录output数组中已存放数字字符的个数
    for (int i = 0; i < len; i++) {
        if (isdigit(input[i])) {
            output[index++] = input[i];
        }
    }
    output[index] = '\0'; // 字符串结尾
    qsort(output, index, sizeof(char), strcmp); // 排序
}
int main() {
    char input[100], output[100];
    printf("请输入任意字符串:");
    fgets(input, 100, stdin);
    GetNumString(input, output);
    printf("数字字符按从小到大顺序排列输出:%s\n", output);
    return 0;
}


```
该程序通过循环遍历原始字符串,将数字字符存入output数组中,然后使用qsort函数对output数组进行排序,最终输出排序后的数字字符。其中,isdigit函数用于判断字符是否为数字字符,qsort函数用于对字符数组进行排序。

参考如下

img

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void GetNumString(const char* input, char* output) {
    int len = strlen(input);
    int count = 0;
    char nums[len]; // 保存数字字符的数组,最多len个数字字符

    // 遍历输入字符串,将数字字符存入nums数组
    for (int i = 0; i < len; i++) {
        if (isdigit(input[i])) {
            nums[count++] = input[i];
        }
    }

    // 冒泡排序对nums数组进行排序
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - i - 1; j++) {
            if (nums[j] > nums[j + 1]) {
                char temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }

    // 将排序后的数字字符复制到output数组中
    for (int i = 0; i < count; i++) {
        output[i] = nums[i];
    }

    output[count] = '\0'; // 在output数组末尾添加字符串结束符
}

int main() {
    char input[100]; // 假设最大输入长度为100
    char output[100];

    printf("请输入字符串:");
    scanf("%s", input);

    GetNumString(input, output);
    printf("排序后的数字字符:%s\n", output);

    return 0;
}

引用GPT


#include<stdio.h>
#include<string.h>
#define  N 100
#define  M 100
int num[M];
void getNumString(char str1[]);
void main()
{
    int strlength;     //字符长度
    char str[N];
    printf("请输入字符串:\n");
    gets(str);
    getNumString(str);
}
void getNumString(char str1[]){
    int i,k,j,temp;
    int strlength;
    strlength=strlen(str1);
    k=0;
    for(i=0;i<strlength;i++){
         if(str1[i]>=48 && str1[i]<=57){
               num[++k]=str1[i];
         }
    }
    temp=0;
     for(i=1;i<=k-1;i++)
        for(j=i+1;j<=k;j++)
     {
                 if(num[i]>num[j]){
                       temp=num[i];
                       num[i]=num[j];
                       num[j]=temp;
                 }
     }
     for(i=1;i<=k;i++)
        printf("%c  ",num[i]);
     printf("\n");
}

img

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

// 比较函数,用于排序数字字符
int cmp(const void *a, const void *b) {
    return *(char*)a - *(char*)b;
}

void GetNumString(const char *input, char *output) {
    int len = strlen(input);
    char *nums = (char*)malloc(sizeof(char) * (len + 1)); // 存储数字字符
    int count = 0; // 数字字符计数器

    for (int i = 0; i < len; i++) {
        if (isdigit(input[i])) { // 如果是数字字符
            nums[count++] = input[i]; // 存储到 nums 数组中
        }
    }

    nums[count] = '\0'; // 在末尾加上字符串结束符
    qsort(nums, count, sizeof(char), cmp); // 对 nums 数组进行排序

    strcpy(output, nums); // 将排序后的 nums 数组复制到 output 字符串中
    free(nums); // 释放 nums 数组的内存
}

int main() {
    char input[] = "abc123def456xyz789";
    char output[100];

    GetNumString(input, output);
    printf("%s\n", output);

    return 0;
}

这个函数首先遍历输入字符串,如果遇到数字字符则存储到一个动态分配的 char 数组中。然后对这个数组进行排序,最后将排序后的数组复制到输出字符串中。

在主函数中,我们可以测试一下 GetNumString 函数。对于输入字符串 "abc123def456xyz789",输出应该为 "123456789"。

以下内容部分参考chatgpt

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include<assert.h>
int cmp(const void* a,const void*b)
{
  return *(char*)a - *(char*)b;
}
void GetNumString(const char* input, char* output) {
    int length = strlen(input);
    char* numString = (char*)malloc(sizeof(char) * (length + 1));//申请一个动态数组用来储存字符串里面的数字
     assert(numString );//对指针进行断言,防止出现空指针的情况
    int count = 0;

    for (int i = 0; i < length; i++) {
        if (isdigit(input[i])) {//isdigit是计算机C语言中的一个函数,主要用于检查其参数是否为十进制数字字符,可以用来判断该字符是否为数字字符
            numString[count++] = input[i];
        }
    }

    numString[count] = '\0';
  //使用快速排序进行排序
    qsort(numString,count-1,sizeof(char),cmp);
    strcpy(output, numString);
    free(numString);//释放内存
}

int main() {
    const char* input = "a1bc345def2g";
    char output[100];

    GetNumString(input, output);

    printf("Output: %s\n", output);

    return 0;
}

效果图为:

img



在上述代码中,我们定义了GetNumString函数来获取数字字符并进行排序。首先,我们使用malloc动态分配了足够的内存来存储数字字符。然后,我们遍历输入字符串,将其中的数字字符存储在numString数组中,并使用count变量跟踪存储的数字字符数量。接下来,我们使用快速排序对数字字符进行排序。最后,我们将排序后的结果复制到输出字符数组output中,并在main函数中打印输出结果。
请注意,在使用完动态分配的内存后,我们使用free函数释放了内存,以避免内存泄漏。如果您在实际使用中有更复杂的需求,可能需进行更多 
     的错误处理和内存管理操作。

结果:

img


代码:

void GetNumString(char *input, char *output) {
    int num[10] = {0}; 
    while (*input) {
        if (*input >= '0' && *input <= '9') {
            num[*input - '0']++;
        }
        input++;
    }
    
    int idx = 0;
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < num[i]; j++) {
            output[idx++] = i + '0';
        }
    }
    output[idx] = '\0';
}

int main() {
    char input[100] = "c9on3st1c2har7in6put";
    char output[100] = {0};
    
    GetNumString(input, output);
    printf("input: %s, output: %s\n", input, output);
    
    return 0; 
}


最简单的就是遍历,正则匹配,然后冒泡排序就可以搞定

第一题

/*
2020-5-6  18:45
作者:nyc
功能:任意输入一个字符串,将其中的字符按从小到大的顺序重排
*/
#include<stdio.h>
int main(void) {
    char ch[100];
    char t;    //中间变量
    int i = 0, j = 0;

    printf("请输入一个字符串:");
     scanf("%s",&ch);

    while(ch[i]) {
          j = i;
          while(ch[j]) {
               if((int)*(ch+i) > (int)*(ch+j)) {
                    t = ch[i];
                    ch[i] = ch[j];
                    ch[j] = t;
               }
               j++;
          }
          i++;
     }
     printf("排序后:%s\n",ch);
     return 0;
}

可以一起讨论讨论

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

以下是一个简单的C语言程序,用于查找字符串中的数字并按从小到大排序输出:

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

void GetNumString(const char *input, char *output) {
    char *numstr = (char*)malloc(strlen(input) * sizeof(char));
    int numcount = 0;
    for (int i = 0; i < strlen(input); i++) {
        if (input[i] >= '0' && input[i] <= '9') {
            numstr[numcount] = input[i];
            numcount++;
        }
    }
    numstr[numcount] = '\0';
    for (int i = 0; i < numcount-1; i++) {
        for (int j = i+1; j < numcount; j++) {
            if (numstr[i] > numstr[j]) {
                char temp = numstr[i];
                numstr[i] = numstr[j];
                numstr[j] = temp;
            }
        }
    }
    strcpy(output, numstr);
    free(numstr);
}

int main() {
    const char *input = "ab1cd23ef4gh56";
    char *output = (char*)malloc(strlen(input) * sizeof(char));
    GetNumString(input, output);
    printf("Sorted numbers: %s\n", output);
    free(output);
    return 0;
}

这个程序首先遍历输入字符串,将其中的数字字符存储到一个新的字符串中,然后使用冒泡排序算法将这个新字符串中的字符按从小到大的顺序排序。最后,将排序后的字符串复制到输出缓冲区中。在程序的主函数中,我们调用GetNumString函数并打印输出结果。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢