题目是:输入一段英文句子,翻转句子中的英文单词顺序,注意:单词内字符顺序不变。
分析:
单词间分隔是以空格为间隔,这样以单词为顺序的逆序就可以了。为简单之间,其他标点符号当普通字符处理。
例如:输入“I am a student.",则输出为:“student. a am I"。
下面来看实现:
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<string.h> using namespace std; string invertstr(char* str, const int len) { string str1 = ""; const char *p = NULL; char _str[len]; int end = len ; for(int i = len -1; i>= 0; i--) { p = str + i; if(*p == ' ') { if(*(p+1) == '\0') { str1 += " "; end -= 1; } else { memset(_str, 0, len); strncpy(_str, p + 1, end - i - 1); end = i; str1 += _str; str1 += " "; } } } p = str; if(*p != ' ') { memset(_str, 0, len); strncpy(_str, p, end); end = 0; str1 += _str; } return str1; } int main() { char streng[] = "I am a student."; string strRes = invertstr(streng, strlen(streng)); cout << "before Invert string: " << streng << endl; cout << "after Invert string: " << strRes.c_str() << endl; return 0; }
输出结果为:before Invert string: I am a student.
after Invert string: student. a am I