繁体   English   中英

如何在C中将两个数组字符串转换为一个数组字符串

[英]how to make two array strings into one array string in C

如何将2个数组的字符串变成1个数组的字符串,我可以在其中打印出所有52张扑克牌?

我的代码:

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


int main() {
    char deck[52];
    char suits[] = {"Hearts","Diamonds","Clubs","Spades"};
    char values[]= {"Ace","Two","Three","Four","Five","Six",\
                    "Seven","Eight","Nine","Ten","Jack",\
                    "Queen","King"};
    int V, S, d = 0;
    char string;
    for ( S= 0; S <4; S++) {
        for (V =0; V< 13; V++) {
            string = strcat( values[V], suits[S]);
            deck[d] = string;
            printf("%s\n", string);//prints out all the 52 playing cards
            d++;
        }
    }

    return 0;
}

当我执行程序时,出现问题,要求我调试程序或关闭程序,最后我关闭程序,却什么也没有返回。 您能给我一个可行的答案吗?

检查下面的代码来修复代码中的问题:代码的问题是,您尝试在打印之前修改实际的字符串,因此,在下一个迭代中将修改字符串。 因此,只需复制值并适合数组,然后将其打印出来,如下所示。

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


int main()
{
  int i=0;
  char deck[30] = "";
  char suits[][30] = {"Hearts","Diamonds","Clubs","Spades"};
  char values[][30]= {"Ace","Two","Three","Four","Five","Six",
                    "Seven","Eight","Nine","Ten","Jack",
                    "Queen","King"};
  int V, S;
  for ( S= 0; S <13; S++)
  {
    for (V =0; V< 4; V++){
    memset(deck,0,sizeof(deck));/* Clear the buffer before writing new value*/
    strcpy( deck, values[S]);
    strcat(deck,suits[V]);
    printf("%s\n", deck);//prints out all the 52 playing cards
    i++;
   }
  }
    printf("Number of playing cards: %d\n",i);

    return 0;
  }

strcat()返回一个char * ,一个指向char的指针,而不是char

您甚至不需要考虑strcat()的返回值,因为假设已经分配了足够的内存,目标指针(第一个参数)现在将包含连接的字符串。

因此,在您的代码中,您尝试将连接的字符串放在values[V] ,当已经分配给它的内存不足时,这可能会失败。

最好的方法是分配一些内存(就像使用deck[] )并将其全部设置为零。 然后在其中保留strcat()

strcat(deck, values[V]);
strcat(deck, suits[S]);

使用strcpystrcat的替代方法是使用sprintf

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

#define NUM_SUITS 4
#define CARDS_PER_SUIT  13
#define TOTAL_CARDS (NUM_SUITS * CARDS_PER_SUIT)

int main() 
{
    char deck[TOTAL_CARDS][24];
    char* suits[NUM_SUITS] = {"Hearts","Diamonds","Clubs","Spades"};
    char* values[CARDS_PER_SUIT]= {"Ace","Two","Three","Four","Five","Six",
                    "Seven","Eight","Nine","Ten","Jack",
                    "Queen","King"};

    int s, c, i;

    for(s = 0; s < NUM_SUITS; s++)
    {
       for(c = 0; c < CARDS_PER_SUIT; c++)
       {
           sprintf(deck[(s * CARDS_PER_SUIT) + c], "%s of %s", values[c], suits[s]);
       }
    }

    for(i = 0; i < TOTAL_CARDS; i++)
    {
        printf("%s\n", deck[i]);
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM