int main()
{
char str[1000],temp;
int i,j=0;
printf("String: ");
gets(str);
i=0;
j=strlen(str)-1;
while(i<j)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;
j--;
}
printf("\n");
printf("%s",str);
return 0;
}
我想改变rota
- 在:15 15 15 15 15 0 0
- 出:0 0 51 51 51 51 51
但我想:0 0 15 15 15 15 15
答案 0 :(得分:0)
这是因为你基本上镜像字符串而不关心字符串的内容。您需要让代码知道该字符串包含以空格分隔的子字符串,并基于此反转。
一种方法是对字符串进行标记(例如strtok
)并将子字符串推入堆栈,然后从堆栈中重新创建字符串。
答案 1 :(得分:0)
您现在正在反转字符串中字符的顺序,但您似乎想要反转以空格分隔的字段的顺序。要实现这一点,一种方法是向后遍历数组并在每次遇到空格时打印尾部,然后用'\0'
替换空格。或者用空格分隔的字段作为元素形成一个字符串数组,然后颠倒该数组的顺序(与现在相同的方法,但处理指向char
而不是char
的指针)。
答案 2 :(得分:0)
调用此函数以反转字符串。它接受字符串,然后将每个字推入堆栈,直到字符串为空。然后它开始弹出堆栈中的单词,从而反转字符串,但不是单词。
void rev(char *str){
char s[20];
int i=0;
for(; str[i]!=' ' && str[i]!='\0'; i++)
s[i]=str[i];
s[i]='\0';
if(str[i]==' ')
rev(str+i+1);
printf("%s ",s);
}
答案 3 :(得分:0)
要做的步骤:
reverseString(char* str)
将整个字符串传递给此函数。 你会得到
0 0 51 51 51 51 51
通过拆分数组中的空格来获取每个元素。说...
arr [0] = 0; arr [1] = 0; arr [2] = 51; arr [3] = 51; ...
将单个数组传递给字符串反向函数。例如:
reverseString(ARR [0]); reverseString(ARR [1]); reverseString(ARR [2]); ...
5连接数组,你将得到
0 0 15 15 15 15 15