ODOA(1) 翻转句子中单词的顺序(C语言实现)

来源:互联网 发布:sql uniom 编辑:程序博客网 时间:2024/05/18 02:20

动动手才发现自己现在的在C/C++方向的几个问题:

  • 对自己的入门语言C语言变得非常陌生
  • 编程的思维固定在找既有的方法,主要原因是python写多了,基本上所有常见的问题,都有现成的方法,让自己变得懒惰了
  • 对C++的实际应用不熟练,虽然一直在看C++相关的东西,但是实战经验还是太少,在后面会更多的使用C++来实现一些算法
  • 由于python 的链表,字典设计的非常方便,所以在数据结构方面也缺乏训练和提高

今天先做一个简单的问题。


问题描述:

翻转句子中单词的顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理

例如:输入“I am a student.”,则输出“student.a am I”。


/*  Name: reverse.h  Author: suzhou  Date:   2014.02.12  Num.    1 */#include"stdio.h"#include"string.h"void reverseStr(char* str, int i, int j);void reverseWords(char* str);

/*  File: wordsreverse.c  Author: suzhou  Date:   2014.02.12  Num.    1  Question:  翻转句子中单词的顺序。  题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。  句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。  例如输入“I am a student.”,则输出“student.a am I”。 */#include"reverse.h"/* 字符串反转 */void reverseStr(char* str, int i, int j){for (; i < j; i++, j--){char tmp;tmp = str[i];str[i] = str[j];str[j] = tmp;}return ;}/* 句子反转 */void reverseWords(char* str){int i = 0;char* subStrStart;char* subStrEnd;char* currentPos;currentPos = str;while(*currentPos!='\0'){subStrStart = currentPos;while(*currentPos!=' ' && *currentPos!='\0')currentPos++;subStrEnd = currentPos - 1;reverseStr(str, (int)(subStrStart - str), (int)(subStrEnd - str));currentPos++;}return;}int main(){char str[20] = "I am a student.";reverseStr(str, 0, strlen(str)-1 );reverseWords(str);printf("%s\n", str);return 0;}


不要认为实现这类基础算法是“重复造车轮”,能说这句话的前提条件是自己有造车轮的能力。好好打牢基础才是现阶段的关键任务。

1 0