字符串反向而不转动c中的数字

时间:2013-11-15 13:11:11

标签: c string numbers

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

4 个答案:

答案 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)

要做的步骤:

  1. 写一个字符串反转函数。说reverseString(char* str)
  2. 将整个字符串传递给此函数。 你会得到

    0 0 51 51 51 51 51

  3. 通过拆分数组中的空格来获取每个元素。说...

    arr [0] = 0; arr [1] = 0; arr [2] = 51; arr [3] = 51; ...

  4. 将单个数组传递给字符串反向函数。例如:

    reverseString(ARR [0]); reverseString(ARR [1]); reverseString(ARR [2]); ...

    5连接数组,你将得到

    0 0 15 15 15 15 15