将字符串中的每个字母(有序地)合并为一个新字符串

时间:2018-06-20 23:05:48

标签: c

所以,我还是C编程的新手。 一共有3个长度相同的字符串。
str1 =“ abc”,str2 =“ def”,str3 =“ ghi”。
新字符串中的输出将类似于“ adgbehcfi”。

#include<stdio.h>

int main(void)
{
    char str1[32], str2[32], str3[32], s[32];
    int count, i, j=0;
    printf("Insert String 1:");
    scanf("%s", str1);
    printf("Insert String 2:");
    scanf("%s", str2);
    printf("Insert String 3:");
    scanf("%s", str3);
    for(count=0;str1[count]!='\0';count++);
    for(i=0;i<count;i++){
        str1[i]=s[j];
        str2[i]=s[j+1];
        str3[i]=s[j+1];
        j++;

    }
    printf("String:%s", s);
    return 0;
}

我试图运行该程序,但是当我尝试显示新字符串时,它不会出现。所有帮助都得到了深深的重视。

3 个答案:

答案 0 :(得分:1)

澄清您的问题。在c

str1[i]=s[j];

表示

'从s复制第j个字符并将其放入str1的第i个字符'

你的意思是相反的

s[i]=str1[j];

答案 1 :(得分:1)

您确实应该检查目标字符串的大小。这种方法使用指针,减少了操作,您可能会喜欢比较。

#include<stdio.h>

char*
strmerge3(char* s, char*str1, char*str2, char*str3)
//strmerge3(char* s, long slen, char*str1, char*str2, char*str3)
{
    if(!s) return(s); //handle NULL in string
    char *dp=s; //destination pointer
    char *p1=str1?str1:""; //source pointers
    char *p2=str2?str2:"";
    char *p3=str3?str3:"";
    //long len=0; //slen--; //save room for null terminator

    for( ; (*p1 | *p2 | *p3) ; ) {
        if(*p1) dp++ = p1++; //if(++len>len) break;
        if(*p2) dp++ = p2++; //if(++len>len) break;
        if(*p3) dp++ = p3++; //if(++len>len) break;
    }
    dp = '\0'; //null terminate dest, at end
    return(s);
}

int main(void)
{
    char str1[32], str2[32], str3[32], s[32*3];
    int count, i, j=0;
    printf("Insert String 1:");
    scanf("%s", str1);
    printf("Insert String 2:");
    scanf("%s", str2);
    printf("Insert String 3:");
    scanf("%s", str3);

    strmerge3(s,str1,str2,str3);
    //strmerge3(s,sizeof(s),str1,str2,str3); //you should pass s size

    printf("String:%s", s);
    return 0;
}

答案 2 :(得分:0)

for(i=0, j = 0;j<count;i += 3, j++){
    s[i]   = str1[j];
    s[i+1] = str2[j];
    s[i+2] = str3[j];
}
s[i] = '\0';
printf("String:%s ", s);

这就是您想要的:)作为一个小挑战,试图弄清楚它是如何工作的,它将帮助您了解正在发生的事情。对于SO社区,我将返回并编辑答案,以解释大约一个小时后的工作情况。