【问题标题】:Function that returns combination of two strings in C [closed]在C中返回两个字符串组合的函数[关闭]
【发布时间】:2021-10-12 02:25:57
【问题描述】:

所以如果我输入:“Ben”和“Tom”,返回的字符串将是“BTeonm”。我必须在不使用预建函数的情况下做到这一点。我完全不知道如何处理这个问题,因为我对 C 很陌生。

任何提示或帮助将不胜感激!

【问题讨论】:

  • 注意:关于从函数返回字符串:Function returning address of local variable error in C.
  • 您可以创建一个带有 for 循环的函数,该函数逐个字符地扫描两个字符串并将它们连接到第三个字符串中!注意字符串内存使用!
  • @WeatherVane 是的,我已删除我的评论。我没有正确地抓住这个问题!道歉。
  • 尽管如此,简单地询问如何做一个作业(或等价物)对于 Stack Overflow 来说是不合适的,主要是因为它太宽泛了。 Stack Overflow 是针对特定问题的,例如问题的一部分。我们不知道你是否知道如何用 C 编写函数定义、如何传递参数、如何检查字符串的长度、如何分配内存、如何编写循环、如何访问字符串的字符等等。 Stack Overflow 不是教程服务。寻找引物。如果您对任务的某个部分有疑问,请询问该特定部分。
  • 还有八月份的课。 Stack Overflow 被世界各地的人们在各种情况下使用。

标签: c string function


【解决方案1】:

这是另一种处理方法,没有任何字符串长度限制:

char *strmix(const char *str1,const char *str2);

int main(int argc, char *argv[])
{
    char *p;

    if (argc<3) {
        puts("Usage: blend stringA stringB\n");
        return 1;
    }
    puts(p = strmix(argv[1],argv[2]));
    free(p);
    return 0;
}

char *strmix(const char *str1,const char *str2)
{
    char *str = malloc(strlen(str1) + strlen(str2) + 1);
    char *p = str;

    while (*str1  ||  *str2) {
        if (*str1)
            *p++ = *str1++;
        if (*str2)
            *p++ = *str2++;
    }
    *p = 0;
    return str;
}

如果不允许您使用strlen,您应该可以相当轻松地创建自己的。

【讨论】:

  • 问题是不要使用“prebuild”函数,然后我宁愿不使用 malloc 并将使用“prebuild”函数的选择留给作者! :)
  • 考虑到您使用了strlen,这是一个“预构建”字符串函数!!!
  • 我确实解决了strlen,但您对malloc、@SirJoBlack 提出了一个很好的观点。也许然后只需创建一个可能 1000 个字符的静态固定大小数组,并进行一些范围检查。
  • 我看到你解决了我留给作者的两个问题! (似乎)... ;)
  • 我的代码无论如何都是故意的,只是一个指示......
【解决方案2】:

因为是一个暑假的星期六,我很高兴,我已经为你写了一点代码,但它不完整。

代码使用的唯一“预建”函数是puts,我看不出不使用它的方法。

代码有两个问题:

  1. 字符串不能超过 64 个字节。如果它们更长,则结果将被削减。

  2. 字符串的长度应该相等。如果长度不同,结果将被切割成较短字符串的长度。

现在你要解决这两个问题......我希望你这样做!

你可以从命令行运行代码

intesect string1 string2

...它会给你答复!

代码如下:

#include <stdio.h>

char * intersect(char *c, int clen, const char *a, const char *b);

int main(int argc, char *argv[])
{
    char c[129];

    if (argc<3) {
        puts("Usage: intersect stringA stringB\n");
        return 1;
    }

    puts(intersect(c,sizeof(c),argv[1],argv[2]));

    return 0;
}

char * intersect(char *c, int clen, const char *a, const char *b)
{
    int i=0,j=0;

    while (a[i] && b[i] && j<clen-2){

        c[j++]=a[i];
        c[j++]=b[i++];

    }

    c[j]=0;

    return c;

}

【讨论】:

  • 只是一个简单的问题,为什么 c[j]=0;需要线路吗?
  • 因为您之前在 cmets 中的回复,您应该知道这一点。答案是所有 C 字符串都以 0 结尾。如果我们不在搅拌所有字节的末尾插入 0,直到达到值 0 的字节才会被打印。 :)
  • 哦,在 C++ 中,我在“for”循环中使用 NULL。还是谢谢!
  • 指针最好使用NULL而不是0。反正C++字符串不是C字符串! ... C++ 字符串是一个对象!最好不要混淆,在 C++ 中,char[] 和 string。
  • 这是 C ... 不是 C++ 和 char[] 不是 C++ 字符串! ;)
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多