鉴于此作业:编写一个具有3个参数的函数:前两个将在第3个中合并。示例:s1 =“abcde”,s2 =“1234567”,结果:s3 =“a1b2c3d4e567”。
提前感谢您的回答。 :)
到目前为止,我的代码看起来像这样(问题是它只在两个字符串的长度相等时才有效:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int homework(char a[], char b[])
{
char c[210]={'0'};
int h1=strlen(a);
int h2=strlen(b);
int i=0;
int j;
int db=0;
int l=0;
while ( h1>=0 && h2>=0 )
{
db++;
c[i]=a[l];
c[i+1]=b[l];
h2--;
h1--;
i+=2;
l++;
}
h1++;
h2++;
printf("%d %d",h1,h2);
if (h1>0){
i--;
while (h1>0)
{
c[i]=a[l];
l++;
i++;
h1--;
}
}
if (h2>0){
i--;
while (h2>0)
{
c[i]=a[l];
l++;
i++;
h2--;
}
}
for (j=0; j<strlen(a)+strlen(b); j++)
printf("%c",c[j]);
}
int main()
{
char a[100],b[100];
gets(a);
gets(b);
homework(a,b);
return 0;
}
答案 0 :(得分:0)
我尝试过这样的事情:
#include <stdio.h>
#include <string.h>
void combinestrings(char* str1,char* str2,char* outputstr)
{
int slen1 = (int)strlen(str1);
int slen2 = (int)strlen(str2);
int slength;
if (slen1 < slen2)
slength = (int)strlen(str2);
else
slength = (int)strlen(str1);
int charptr = 0;
for (int n=0;n < slength;n++)
{
if (*(str1+n) && slen1)
{
*(outputstr+charptr) = *(str1+n);
++charptr;
--slen1;
}
if (*(str2+n) && slen2)
{
*(outputstr+charptr) = *(str2+n);
++charptr;
--slen2;
}
}
}
void main()
{
char* str1 = "abcde";
char* str2 = "123456789";
char out[256];
combinestrings(str1, str2, &out[0]);
printf("%s\n",out);
}
似乎可以在Linux gcc下编译好。
或者(正如Roi所指出的)如果你不介意输出字符串的内存分配。类似的东西:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void combinestrings(char* str1,char* str2,char* outputstr)
{
int slen1 = (int)strlen(str1);
int slen2 = (int)strlen(str2);
int slength;
if (slen1 < slen2)
slength = (int)strlen(str2);
else
slength = (int)strlen(str1);
int charptr = 0;
for (int n=0;n < slength;n++)
{
if (*(str1+n) && slen1)
{
*(outputstr+charptr) = *(str1+n);
++charptr;
--slen1;
}
if (*(str2+n) && slen2)
{
*(outputstr+charptr) = *(str2+n);
++charptr;
--slen2;
}
}
}
void main()
{
char* str1 = "abcde";
char* str2 = "123456789";
char* outstr;
//Preallocate our output string and set memory to zero
int slen1 = (int)strlen(str1);
int slen2 = (int)strlen(str2);
outstr = (char*)calloc((slen1+slen2)+1,sizeof(char));
if (!outstr)
{
printf("Could not allocate output string\n");
return;
}
//Call our strings 'riffle' function
combinestrings(str1, str2, &outstr[0]);
//Output string
printf("%s\n",outstr);
//Deallocate our memory
free(outstr);
}
答案 1 :(得分:0)
这项工作没问题。进行以下更改:
decimal[] values = {-1.7m , 3.0m , 0.0m , 1.5m , 0.0m , -1.7m , 2.3m , -1,7m};
var result = values
.GroupBy(v => v)
.ToDictionary(g => g.Key, g => g.Count());
foreach(var kvp in result)
{
Console.WriteLine("{0} appears {1} time(s)", kvp.Key, kvp.Value);
}
答案 2 :(得分:0)
您的代码中存在一些问题。
小问题:
您已将homework
函数定义为int homework(char a[], char b[])
- 但该函数中没有return
语句。
函数db
中变量homework
的用法是什么?我不认为我理解它的用法 - 声明(或使用)该变量真的有必要吗?
现在主要问题:
这一次,我首先关注这个循环 -
while( h1>=0 && h2>=0 )
{
// your code
}
为了表明你做了什么错误 - 让我们假设两个字符串a="abc"
(strlen(a)=3
)和b="12345"
(strlen(b)=5
)。
您的循环将正常运行,直至l=2
- 此时(l=2
),输出char
数组c={'a','1','b','2','c','3'}
。
但之后,因为h1=0
和h2>0
,您将从char
和a
获取另外一个b
作为输出数组 - 这些是在那一刻'\0'
和'4'
分别。在此迭代之后,输出数组变为{'a','1','b','2','c','3','\0','4'}
。你不应该做这个循环的迭代。
考虑到这个问题,你的循环应该是这样的:
while( h1>0 && h2>0 )
{
// your code
}
或者,也许是这样:
while( a[l]!='\0' && b[l]!='\0' )
{
// your code
}
在这个循环之后,我看到另一个这样的循环:
while (h2>0)
{
c[i]=a[l]; // ------ (!)
l++;
i++;
h2--;
}
由于最初为h2=strlen(b);
,因此h2
表示要从char
复制到c
的剩余b
的数量。但是在此循环中,您尝试从char
复制a
。
所以,根据我的理解,(!)
行应该是 -
c[i]=b[l];
答案 3 :(得分:0)
/*
*/
#include <stdio.h>
void mixer (const char str1[], const char str2[], char str3[])
{
int i = 0, index = 0;
while ( (str1[i] != '\0') && (str2[i] != '\0') ) {
str3[index++] = str1[i];
str3[index++] = str2[i];
++i;
}
if ( str1[i] != '\0' ) {
// str1 has additional characters
while ( str1[i] != '\0' )
str3[index++] = str1[i++];
}
else {
// str2 may have additional characters
while ( str2[i] != '\0' )
str3[index++] = str2[i++];
}
// terminate the string with a null character
str3[index] = '\0';
}
int main (void)
{
const char s1[] = { "abcde" };
const char s2[] = { "1234567" };
char s3[128];
mixer (s1, s2, s3);
printf ("s3 = %s", s3);
return 0;
}
答案 4 :(得分:0)
你可以试试这个: “
void Homework(char *str1, char *str2)
{
int i;
int j;
int k;
char *str3;
i = 0;
j = 0;
k = 0;
str3 = malloc(sizeof(char) * (strlen(str1) + strlen(str2)) + 1);
while (strlen(str3) != strlen(str1) + strlen(str2))
{
if (k % 2 == 0 && str1[i] != 0)
{
str3[k] = str1[i];
i++;
}
else if (k % 2 == 1 && str2[j] != 0)
{
str3[k] = str2[j];
j++;
}
else if ((i + 1) > strlen(str1))
{
str3[k] = str2[j];
j++;
}
else if ((j + 1) > strlen(str2))
{
str3[k] = str1[i];
i++;
}
k++;
}
printf("Your combine string is: %s. \n", str3);
}'
PS:创建int函数时不要忘记返回一些内容;)