反转字符串中的单词

时间:2014-03-10 20:43:16

标签: c reverse

我需要一个程序来反转字符串中的单词。

  

输入:我的车很快   输出:快是车我的​​

int printRword(char * line) {
    for(; *line; line++) {
        if(*line == ' ') {
            printRword(line + 1); 
            printf("%s", line); 
            return 0; // after you find the space set it to null 
        }
    }
}

int main(void) {
    char *line = "this is a long line that we are working with\n";
    printf("%s", line);
    printRword(line); 

    return 0;
}

我知道在找到空间后我需要将空间设置为null,并且我尝试过printRword(line + 1)='\ 0'; 这不起作用 有什么建议吗?

4 个答案:

答案 0 :(得分:1)

您可以反转整个字符串,然后反转每个单词,具有反转单词顺序的效果,但保留每个单词中的字母的顺序正确。也许不是最有效的,但概念上很干净 - 而且不依赖于语言!

答案 1 :(得分:0)

您可以逐个字符地检查字符串,用ASCII NUL字符替换空格( C 的字符串终结符),并记录下一个位置每种情况(通过推入堆栈),从而记录每个单词的开头。当你到达字符串的末尾时,你可以向后浏览“单词开头”位置列表(可能是通过弹出堆栈),每次打印出单词后跟一个空格。

这是基本的想法。如果你必须处理单词或换行符之间的多个空格,它会变得有点复杂,但并不多。

答案 2 :(得分:0)

找到修改后的工作代码:

int printRword(char * line)

{

   char tempbuf[100]; //Here length i have hardcoded to 100

   char *ptr;
   strcpy(tempbuf,line); //copied to tempbuf to keep the original string unmodified

   //Replace the \n with the null character
    ptr = strrchr(tempbuf,'\n');
    if(ptr != NULL)
    {
      *ptr = '\0'; 
    }

    while(*tempbuf != '\0')
    {
        ptr = strrchr(tempbuf,' ');
        if(NULL != ptr)
        {
             *ptr = '\0';
              ptr++;

              printf("%s ",ptr); 
         }
         else
         {
             printf("%s\n",tempbuf);
             *tempbuf ='\0';
          }
    }  

}

测试结果:

atharv @ atharv-Inspiron-5423:〜/编程$ ./a.out

这是我们正在使用的一条长线

有了工作,我们就行了这个

atharv @ atharv-灵-5423:〜/编程$

答案 3 :(得分:0)

我使用相同的递归方法修改你的代码以获得所需的输出,只是添加了一个只能打印到下一个空格的函数..必须有一个函数,但我不知道它。

#include <stdio.h>


void printTillNextSpace(char *s){
    while(*s != ' ' && *s != '\0' && *s != '\n')
        printf("%c",*s++);
        printf("%c",' ');        
}

int printRword(char * line){

    char* start = line;
    for(;*line; line++){
        if(*line == ' '){
            printRword(line + 1);
            printTillNextSpace(start);
            start = line + 1; 
            return 0; // after you find the space set it to null 
        }
    }
    printTillNextSpace(start);
}

int main(){

    char * line = "this is a long line that we are working with\n";

    printf("%s", line);

    printRword(line); 

return 0;
}