簡體   English   中英

使用C編程將兩個單詞交換為字符串

[英]Swap two words in a string using C programming

我即將完成編寫程序以交換輸入到程序中的兩個單詞。 如果我輸入“ Billy Bob”,輸出將是“ @ \\ 300_ \\ 377”,有點奇怪……我相信我的scanf出了點問題,但不太確定。 這是我到目前為止所擁有的..

{ int i,j,l;
char str[59];
printf("Enter the string\n");
scanf("%s", &str[59]);
l=strlen(str);
for(i=l-1; i>=0; i--)
{ if(str[i]==' ')
{ for(j=i+1; j<l; j++)
    printf("%c",str[j]);
    printf(" ");
    l=i;
    }
    if(i==0) 
    { printf(" "); 
        for(j=0; j<l; j++) 
            printf("%c",str[j]); 
    } 
} 
scanf("%s", &str[59]);

將輸入寫入分配的空間的末尾。 使用第一個元素的地址:

scanf("%s", str);

但這會給您第一個字,因此可以執行以下操作:

scanf("%s %s", str1, str2); // str1, str2 are arrays

或使用fgets:

fgets(str, 59, stdin);

而不是使用scanf("%s", &str[59]); ,您可以使用gets(str);

它工作得很好...

這是錯誤的:

 scanf("%s", &str[59]);  
 //^not reading the str, str[59] is even out of bound

應該:

scanf("%s", str);

這種編寫函數的方式有些難以理解。 我不確定您在什么情況下編寫它,但是另一種解決方案是用標記(在此情況下為空格)分割輸入字符串,並以相反的順序打印出兩個字符串。 函數strtok()的示例可以在此處找到。

像這樣:

char str[] ="billy bob";
char * firstToken;
char * secondToken
firstToken = strtok(str, " ");
secondToken = strtok(NULL, " ");
printf("%s %s", secondToken, firstToken);

您正在將str之后的第一個地址傳遞給scanf。 &str[59]更改為str

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM