使用C编程在字符串中交换两个单词

时间:2013-04-15 23:04:55

标签: c string

我即将完成编写程序,将两个单词交换为一个程序。如果我输入“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]); 
    } 
} 

5 个答案:

答案 0 :(得分:3)

scanf("%s", &str[59]);

将输入写入分配空间的末尾。使用第一个元素的地址:

scanf("%s", str);

但这会给你第一个字,所以要么:

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

或使用fgets:

fgets(str, 59, stdin);

答案 1 :(得分:1)

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

,而不是使用gets(str);

完美无缺......

答案 2 :(得分:0)

这是错误的:

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

应该是:

scanf("%s", str);

答案 3 :(得分:0)

编写函数的方式有点难以阅读。我不确定你在写什么情况,但是另一种解决方案是通过令牌分割输入字符串,在这种情况下是一个空格,并以相反的顺序打印出两个字符串。可以找到函数strtok()的示例here

这样的事情:

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

答案 4 :(得分:-1)

您将str之后的第一个地址传递给scanf。将&str[59]更改为str