2014-03-30 108 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()

相關問題