gpt4 book ai didi

c - 交换两个字符

转载 作者:行者123 更新时间:2023-11-30 15:53:05 28 4
gpt4 key购买 nike

我想知道我的代码出了什么问题。它应该交换用户指定的两个单词,但它什么也没做。一点帮助就好了。

#include <stdio.h>

void changeW(char *ptab1, char *ptab2){
char tmp;
tmp = *ptab1;
*ptab1 = *ptab2;
*ptab2 = tmp;
printf("%s %s",ptab1,ptab2);
return;
}
int main(void) {

char tab1[25];
char tab2[25];

printf("type two words");
scanf("%s %s",tab1,tab2);
changeW(tab1,tab2);
return 0;
}

已更正代码,但问题仍然存在!我可以交换小单词,但是当它们变长时,我会在终端中看到奇怪的字符,例如 ����。

void changeW(char *ptab1, char *ptab2){
int l;
if(length(ptab1)<length(ptab2)){
l = length(ptab2);
}
else {l=length(ptab1);}
for(int i=0; i<l;i++){
char tmp;
tmp =ptab1[i];
ptab1[i] =ptab2[i];
ptab2[i]=tmp;
}
printf("%s %s",ptab1,ptab2);
return;
}
int main(void) {

char tab1[25];
char tab2[25];

printf("type two words");
scanf("%s %s",tab1,tab2);
changeW(tab1,tab2);
return 0;
}

好的,我找到了解决方案,感谢大家的帮助。你所要做的就是改变W,

printf("%s\t%s",ptab1,ptab2);

单个空格似乎不足以分隔两个单词,制表符就可以了。

最后编辑:事实上,搜索最长的表是没有用的,因为 tab1 和 tab2 都是 25 个字符长。

for(int i=0; i<25;i++)

工作正常。

最佳答案

您只是交换前两个字符。要交换字符串,您必须使用循环。

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

void changeW(char *p1, char *p2, size_t p1_len)
{
char *tmp = malloc (p1_len); /* or [C99] char tmp[p1_len]; */
strcpy (tmp, p1);
strcpy (p1, p2);
strcpy (p2, tmp);
}

另一种可能性是交换指针。

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

void swap_strings(char **p1, char **p2)
{
char *tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}

int main (void)
{
char s1[] = "hello";
char s2[] = "word";

char *p1 = s1;
char *p2 = s2;

puts(p1);
puts(p2);

swap_strings(&p1, &p2);

puts(p1);
puts(p2);

return 0;
}

关于c - 交换两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900448/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com