繁体   English   中英

字符串反转而无需在c中转数字

[英]String reverse without to turn the numbers in c

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;
}

我想改变轮值

-输入:15 ​​15 15 15 15 0 0 0
-出:0 0 51 51 51 51 51但我要:0 0 15 15 15 15 15

这是因为您基本上是在镜像字符串而不关心字符串的内容。 您需要代码来注意该字符串包含以空格分隔的子字符串,并在此基础上反转。

一种方法是标记字符串(例如使用strtok )并将子字符串推入堆栈,然后从堆栈中重新创建字符串。

现在,您正在颠倒字符串中字符的顺序,但是似乎您想颠倒以空格分隔的字段的顺序。 为此,一种方法是向后遍历数组,并在每次遇到空格时打印尾部,然后将其替换为'\\0' 或使用以空格分隔的字段作为元素形成字符串数组,然后反转该数组的顺序(与现在相同的方法,但处理的是char指针,而不是char s)。

调用此函数以反转字符串。 它接受字符串,然后将每个单词压入堆栈,直到字符串为空。 然后,它开始从堆栈中弹出单词,从而反转字符串,而不是单词。

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);
}

步骤:

  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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM