知识储备:02数组与字符串:String相关问题

来源:互联网 发布:phpstudy mac 编辑:程序博客网 时间:2024/06/05 17:52

String相关问题

1.用特定的间隔符号将句子分隔成单词,倒转非数字的单词

2.替换特定字符

新字符串增长,从后往前赋值

新字符串剪短,从前往后赋值

代码如下:

#include <iostream>#include <vector>#include <unordered_map>using namespace std;/*String相关问题2017-8-21*///1.反转句子//判断间隔字符bool isGap(char *c){return (*c == ' ' || *c == ',' || *c == '.');}//是否数字bool isNumber(char *c){if (*c<'0' || *c>'9')return false;return true;}//是否需要反转bool needReverse(char *sentence, int *offset){int length = strlen(sentence);bool needReverse = false;*offset = 0;while (!isGap(sentence + (*offset)) && (*offset) < length){if (!isNumber(sentence + (*offset))){needReverse = true;}(*offset)++;}return needReverse;}//反转单词void ReverseWord(char *c, int length){int i = 0;int j = length - 1;while (i < j){swap(c[i], c[j]);i++;j--;}}//反转句子void reverseSentence(char *sentence){int length = strlen(sentence);int offset;for (int i = 0; i < length;){if (needReverse(sentence + i, &offset)){ReverseWord(sentence, offset);}i += (offset + 1);}}//2.空格替换为%20//检测特定字符,返回下标int findChar(char *src, int index, char c){int len = strlen(src);for (int i = index; i < len; i++){if (src[i] == c)return i;}}//空格替换为%20char* replaceSpace(char *src){char *newStr;//新字符串char *repStr = "%20";int len = strlen(src);newStr = (char*)malloc(sizeof(char)*(len + 2));memset(newStr, 0, sizeof(char));int pos = strchr(src, ' ') - src;for (int i = len - 1; i > pos; i--)newStr[i + 2] = src[i];for (int i = 0; i < 3; i++)newStr[pos+i] = repStr[i];for (int i = 0; i < pos; i++)newStr[i] = src[i];return newStr;}//%20替换为空格char* replace20(char *src){char *newStr;//新字符串char *repStr = " ";int len = strlen(src);newStr = (char*)malloc(sizeof(char)*(len - 2));memset(newStr, 0, sizeof(char));int pos = strstr(src, "%20") - src;for (int i = 0; i < pos; i++)newStr[i] = src[i];newStr[pos] = ' ';for (int i = pos + 1; i < len - 2; i++)newStr[i] = src[i + 2];return newStr;}int main(){//char *c = "word";//字符串常量,无法修改,报错//字符数组char c[] = "word";ReverseWord(c, 4);cout << "采用字符数组反转后的单词:"<< c << endl;//堆上开辟内存char *temp = "word";char *c1 = (char*)malloc(sizeof(char)*(strlen(temp) + 1));strcpy(c1, temp);ReverseWord(c1, 4);cout <<"采用堆上开辟内存反转后的单词:" << c << endl;//释放内存free(c1);cout << "c1内存已释放" << endl;char *str = "Big mac";str = replaceSpace(str);cout << "%20替换空格:" << str << endl;str = "Big%20mac";str = replace20(str);cout << "空格替换%20:" << str << endl;return 0;}

运行结果:

原创粉丝点击