[英]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.