所以,我还是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;
}
我试图运行该程序,但是当我尝试显示新字符串时,它不会出现。所有帮助都得到了深深的重视。
答案 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社区,我将返回并编辑答案,以解释大约一个小时后的工作情况。