#include <stdio.h>
#define SIZE 101
void swap(char *a, char *b);
int main(void) {
char string1[SIZE];
char string2[SIZE];
printf("please enter string 1 :");
scanf("%s", string1);
printf("please enter string 2 :");
scanf("%s", string2);
swap(string1, string2);
printf("string 1 is %s, string 2 is %s\n", string2, string1);
}
void swap(char *a, char *b) {
int i;
char temp[101];
for (i = 0; i < SIZE; i++) {
temp[i] = *a;
*a = *b;
*b = temp[i];
}
}
当我向string1
和string2
提供输入时,请说"yes"
和"hello"
,它将打印string1
为yello
和{ {1}}是string2
。我尝试通过将hes
更改为*b
和*[b+1]
更改为*a
进行修改,并获得第一个可以使用的角色,但现在第二个角色获胜了#39}。交换。
修改
此外,我还尝试过其他功能,但问题仍然存在。
*[a+1]
答案 0 :(得分:1)
您的swap
功能错误:
以下是更正后的版本:
void swap(char* a, char* b)
{
int i; char temp;
for (i = 0; i<SIZE; i++)
{
temp = a[i];
a[i] = b[i];
b[i] = temp;
}
}
temp
数组,只有一个char
足够临时。a
和b
的不同字符,而不仅仅是第一个字符。 BTW:这是swap
的更好版本,您可以将大小作为参数传递:
void swap(char* a, char* b, int size)
{
int i; char temp;
for (i = 0; i < size; i++)
{
temp = a[i];
a[i] = b[i];
b[i] = temp;
}
}
答案 1 :(得分:1)
实际上只交换字符串的第一个字符(这在其他答案中有所说明),你不会看到这个,因为你改变了打印的顺序
printf("string 1 is %s, string 2 is %s\n", string2, string1);
^^^^^^^^^^^^^^^
此处您始终只是交换第一个字符,因为a
和b
始终指向第一个元素。
for(i=0; i<SIZE; i++)
{
temp[i]= *a;
*a=*b;
*b=temp[i];
}
你可以使用数组下标
int i; char temp;
for (i = 0; i < SIZE; i++)
{
temp = a[i];
a[i] = b[i];
b[i] = temp;
}
答案 2 :(得分:0)
尝试使用*(a+1)
之类的括号而不是括号*[b+1]
。在你的代码中
改变以下
for(i=0; i<SIZE; i++)
{
temp[i]= *a;
*a=*b;
*b=temp[i];
}
带
for(i=0; i<SIZE; i++)
{
temp[i] = *(a+i);
*(a+i) = *(b+i);
*(b+i) = temp[i];
}
最终代码在这里:
#include <stdio.h>
#define SIZE 101
void swap(char* a, char* b);
int main(void)
{
char string1[SIZE]; char string2[SIZE];
printf("please enter string 1 :");
scanf("%s",string1);
printf("please enter string 2 :");
scanf("%s",string2);
swap(string1, string2);
printf("string 1 is %s, string 2 is %s\n",string1,string2);
return 0;
}
void swap(char* a, char* b)
{
int i; char temp[101];
for(i=0; i<SIZE; i++)
{
temp[i] = *(a+i);
*(a+i) = *(b+i);
*(b+i) = temp[i];
}
}
答案 3 :(得分:0)
您的代码中存在多个问题:
SIZE
次。 SIZE
很奇怪所以你看到它被交换了,之前的bug让它看起来像其他角色被交换了。如果SIZE
是偶数,你就不会交换任何东西,之前的错误会让你错误地认为一切都很好...... 不太重要,但值得一提:
scanf()
0
结束时返回main()
。以下是经过纠正和改进的版本:
#include <stdio.h>
#define SIZE 101
void swap(char *a, char *b, int size) {
for (int i = 0; i < size; i++) {
char temp = a[i];
a[i] = b[i];
b[i] = temp;
}
}
int main(void) {
char string1[SIZE];
char string2[SIZE];
printf("please enter string 1 :");
if (scanf("%s", string1) != 1)
return 1;
printf("please enter string 2 :");
if (scanf("%s", string2) != 1)
return 1;
swap(string1, string2, SIZE);
printf("string 1 is %s, string 2 is %s\n", string1, string2);
return 0;
}