我有作业:编写一个反转字符串的函数,然后使用第一个函数编写一个反转字符串中单词的函数。因此,如果输入是:“有美好的一天”,输出将是:“美好的一天”。 我无法理解为什么我的代码不起作用 - 我不断遇到段错误。 第一个功能(反向)工作得很好。问题出在第二个。 我真的需要你的帮助... 预先感谢您。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char *a)
{
int i, j, size;
char tmp;
size = strlen(a);
j=size-1;
for(i=0; i<size/2; i++)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
j--;
}
}
void reverseAll(char *a)
{
int size;
reverse(a);
size = strlen(a);
char *new = (char*)malloc(size+1);
char *token = strtok(a, " ");
reverse(token);
strcpy(new, token);
printf("%s ", new);
while(token != NULL)
{
reverse(token);
token = strtok(NULL, " ");
strcat(new, token);
}
}
int main()
{
char a[15]= "have a nice day";
reverseAll(a);
printf("%s ", a);
return 0;
}
最佳答案
当 a 为 null 时,
reverse()
应该可以正常工作。 reverse(token)
应该在 token = strtok(NULL, "");
之后。
以下代码工作正常。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char *a)
{
int i, j, size;
char tmp;
if(!a)
return;
size = strlen(a);
j=size-1;
for(i=0; i<size/2; i++)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
j--;
}
}
void reverseAll(char *a)
{
int size;
reverse(a);
size = strlen(a);
char *new = (char*)malloc(size+1);
char *token = strtok(a, " ");
reverse(token);
strcpy(new, token);
//printf("%s ", new);
while(token != NULL)
{
token = strtok(NULL, " ");
reverse(token);
if(token){
strcat(new, " ");
strcat(new, token);
}
}
strcpy(a, new);
free(new);
}
int main()
{
char a[15]= "have a nice day";
reverseAll(a);
printf("%s ", a);
return 0;
}
关于c - 反转c中字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59204364/