【问题标题】:How can I write a function which returns array with repeating strings grouped together?如何编写一个返回数组的函数,该数组将重复的字符串组合在一起?
【发布时间】:2021-03-14 08:30:54
【问题描述】:

这是最初的问题:

写一个函数repeating_group(char* arr[], int n);

在哪里,

  • arr[]: 预定义的要操作的字符串数组
  • narr[] 的大小

并返回 char* res[] 并将重复的字符串组合在一起。

例子:

输入:

char* arr[] = {"tut", "slf", "tut", "lzyy", "slf", "tut"};

输出:

char* res[] = {"tut", "tut", "tut", "slf", "slf", "lzyy"}

这是我的代码:

#include<stdio.h>
char repeating_group(char*arr[],int n)
{
    int i,j;
    printf("char*res[]= {");
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {

            if(arr[i]==arr[j])
            {
                printf("\"%s\",\"%s\",",arr[i],arr[j]);
            }
        }
    }
    printf("}");
}

int main()
{
    char*arr[]={"Carrot","Tomato","Mustard","Carrot","Mustard","Tomato","Potato","Brinjal"};
    int n=sizeof(arr)/sizeof(arr[0]);
    repeating_group(arr,n);
    getchar();
    return 0;
}

这里的问题是它只打印需要的东西,但不返回应该存储元素的数组。

【问题讨论】:

  • 因此您需要将printf 的代码替换为将值插入数组的不同代码。你试过这样做吗?有什么困难?
  • 请注意,对数组进行排序更简单、更快捷。
  • 你可以试试this

标签: arrays c function


【解决方案1】:

由于我也是 C 的新手,我编辑了您的代码并且它有效,但由于我不知道短路和其他方法,我以我的方式完成了它,将有许多其他简单的方法来完成它,而不是我的。有些元素在离开的地方不一样,没有被存储,所以要解决这个问题,必须创建新数组,程序中有两个新数组arr1arr2

#include<stdio.h>
char repeating_group(char*arr[],int n)
{
    int i,j,k=0;
    char *arr1[n];
    char *arr2[n];
   
    for(i=0;i<n;i++)
        arr2[i]=arr[i];
    
    for(i=0;i<n;i++)
    { 
        for(j=i+1;j<n;j++)
        {
            if(arr2[j]==0)
                continue;
            if(arr[i]==arr[j])
            {
                arr1[k++]=arr2[i];
                arr1[k++]=arr2[j];  
                arr2[i]=0;
                arr2[j]=0;
            }
        }   
    }
    for(i=0;i<n;i++)
        if(arr2[i]!=0)
            arr1[k++]=arr2[i];
    
    printf("char* arr[]= {");
    for(i=0;i<n;i++)
        printf("\"%s\",",arr[i]);
    printf("}");
    
    printf("\n\n");
    
    printf("char* res[]= {");
    for(i=0;i<n;i++)
        printf("\"%s\",",arr1[i]);
    printf("}");
    return 0;
}
int main(void)
{
    char *arr[]={"Carrot","Tomato","Mustard","Carrot","Mustard","Tomato","Potato","Brinjal"};
    int n=sizeof(arr)/sizeof(arr[0]);
    repeating_group(arr,n);
    //getchar();
}

有效!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 2011-11-30
    • 2011-09-04
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多