【问题标题】:How to concatenate two strings in c languagec语言如何连接两个字符串
【发布时间】:2013-09-05 06:49:12
【问题描述】:

我有下面的代码连接两个字符串。带有 while 条件的第一个有效,但带有 for 循环的第二个失败。我使用以下输入独立运行它们。

int original[100]="c" , add[50] = "pgm";
concatenate_string(original, add);   
printf("String after concatenation is \"%s\"\n", original);
//strcat(original,add);
//printf("strcat is : %s",original);


void concatenate_string(char *original, char *add)
    {
       while(*original)
          original++;

       while(*add)
       {
          *original = *add;
          add++;
          original++;
       }
       *original = '\0';
    }

void strcat(char *original,char *add)
{
    for (;*original++;);
    for (;*add;)
         *original++=*add++;
    *(original)='\0';

}

【问题讨论】:

  • 注意:你可以在第二个函数中避免*(original)='\0';,实际上你可以写:for (;*original++=*add++;)
  • 顺便说一句,您的第二个版本使用了保留名称。用户定义的函数名不能以str开头。

标签: c algorithm pointers


【解决方案1】:

因为在第二个代码中,您在 nul \0 符号之后附加字符串:

for (;*original++;);
        ^  always increments, even after nul found 

应该是:

for (;*original; original++);

注意:

代码:

for (;*original++;);

等价于

while (*original++); 

但不是你正在使用的。

【讨论】:

    【解决方案2】:

    您的第二个版本在第二个循环开始之前执行了额外的++。尝试在两个循环之间添加--original;,或者作为第二个循环中的初始化。

    【讨论】:

      【解决方案3】:
      #include<stdio.h>
      #include<string.h>
      
      void string_add(char *original,char *add) {
          int i = 0,j,length = 0;
          i = strlen(original);
          length = strlen(add);
          for(j = 0; j<length; j++,i++)
              original[i] = add[j];
      }
      
      int main()
      {
          char original[20] = "I am from ", add[10] = "india";
          string_add(original, add);
          printf("Concatinated : %s\n",original);
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-07-30
        • 2015-07-20
        • 2012-01-17
        • 1970-01-01
        • 2011-11-04
        • 2022-11-16
        • 2012-02-29
        相关资源
        最近更新 更多