2014-03-30 55 views
1

用于合并两个词程序:我在这个程序中得到运行时错误...为什么?

#include<stdio.h> 

int main() 
{ 
    char s1[10],s2[10],s3[10]; 
    int i,j,n=1; 

    for(i=0;i<n;i++) 
     scanf("%s",&s1[i]); 

    for(i=0;i<n;i++) 
     scanf("%s",&s2[i]); 

    for(j=0;s2[i];j++) 
    { 
     s3[i] = s1[i]+s2[j]; 
    } 
    printf("%s",s3); 
    return 0; 
} 

我得到一个运行时错误此计划。任何人都可以帮我纠正它或指出错误是什么?

+0

也许你可以将程序拆分成更小的部分,并尝试其中的每一个呢? – amoebe

+0

请清除你的问题!几乎每个人都在回复不同的东西,但你仍然没有给出任何反馈。 – boh

+0

@Sharme你不能合并这样的单词s3 [i] = s1 [i] + s2 [j];' –

回答

0

scanf("%s",&s1[i]);不会做你认为的事情。在我看来,你很困惑%s%c。这导致缓冲区溢出。因此请阅读scanf()格式字符串的文档。

然后,请勿使用scanf(),因为它不安全,难以正确使用。要获得用户输入,请使用fgets()

1
for(i=0;i<n;i++) 
scanf("%s",&s1[i]); 
for(i=0;i<n;i++) 
scanf("%s",&s2[i]); 

这不是你如何阅读字符串。试试这个:

scanf("%s", s1); 
scanf("%s", s2); 

这并不完美,但应该为初学者工作。

0

你的代码有几个问题:

  • 您正在使用错误的scanf的方式。它应该像scanf("%s", s1);对于s2也是如此。
  • 要合并两个字符串,您可以使用内置函数strcat,它将第二个参数附加到它的第一个参数;只需使用它两次将矢量s3中的两个字符串合并即可。

总之,你的代码应该是这样的:

#include<stdio.h> 
#include <string.h> 

int main() 
{ 
    char s1[10],s2[10],s3[20]; 
    scanf("%s",s1); 
    scanf("%s",s2); 
    strcat(s3,s1); 
    strcat(s3,s2); 
    printf("%s",s3); 
    printf("\n"); 
    return 0; 
} 

只要记住,你的s3矢量必须足够大,以包含两种你的字符串。

+0

但是我的问题是:在小写英文字母表中给出两个单词(不一定是有意义的单词)。它们将被合并成一个单一的新单词,其中给定两个单词中的所有字母(包括重复单词)从左到右依次递增('a'最小,'z'最大)。 – Sharme

+0

老实说,我不明白这是你的问题在这里... – boh

+0

看到,我必须合并两个单词“你好”和“世界”。但它不能合并为“helloworld”,但按字母顺序为“ dehllloorw“...为此我必须编写程序...我不知道如何写...请你帮我... – Sharme

0
#include <stdio.h> 

int main(void){ 
    char s1[10], s2[10], s3[20]; 
    int i, j, n=1; 

    scanf("%9s", s1); 
    scanf("%9s", s2); 

    sprintf(s3, "%s%s", s1, s2); 
    printf("%s\n",s3); 
    return 0; 
} 
0

你可能做一个免费的在线课程 “编程,数据结构&算法” 在https://onlinecourses.nptel.ac.in

无论如何,这个问题的答案是:

#include <stdio.h> 
#include <string.h> 

int main() { 
    char a[20], b[10], c; 
    int x[20]; 
    int i,j,l,n,swap; 
    scanf("%s",a); 
    scanf("%s",b); 
    strcat(a,b); 
    l=strlen(a); 
    for(i=0; i<l; i++) { 
     n = a[i]; 
     x[i] = n; 
    } 
    for(i=0; i<(l-1); i++) { 
     for(j=0; j<(l-i-1); j++) { 
      if(x[j]>x[j+1]) { 
       swap = x[j]; 
       x[j] = x[j+1]; 
       x[j+1] = swap; 
      } 
     } 
    } 
    for(i=0; i<l; i++) { 
     c = x[i]; 
     printf("%c",c); 
    } 
} 
0

您应该编辑问题,如果你的意思是this

好吧首先,如果你申报喜欢char arr[10];然后念想scanf("%s",arr);

所以你读了两个词,如:

scanf("%s",s1); 
scanf("%s",s2); 

好了,现在合并长度10的两句话,第一声明结果数组为10的两倍。

所以这里去的完整代码:

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int compare (const void * a, const void * b) 
{ 
    return (*(char*)a - *(char*)b); 
} 

int main() 
{ 
    char s1[10],s2[10],s3[20]; 

    scanf("%s",s1); 
    scanf("%s",s2); 

    strcpy(s3,s1); // copies content of s1 to s3 
    strcat(s3,s2); // merges to end of s3 the content of s2 

    qsort(s3,strlen(s3),sizeof(char),compare); //sorts s3 

    printf("%s",s3); 
    return 0; 

} 

qsort()

相关问题