/* 淘宝笔试题: 给定一个字符串, 比如"我爱alibaba", 写个函数截取字符串, 比如:我截取前5个字节, 为 “我爱a”, 接3个字节, 就是 “我爱", 半个汉字的就必须截取完 */ #include <string> #include <iostream> char* subString(const char* str, int nSubLength) { if (str == nullptr) return nullptr; int nLength = strlen(str); if (nLength < nSubLength) return nullptr; char ch; bool bMatch = true; for (int nIndex = 0; nIndex < nSubLength; ++nIndex) { ch = str[nIndex]; if (ch < 0 || ch > 255) //双字节 { bMatch = !bMatch; } } char* p = nullptr; if (bMatch == false) { p = new char[nSubLength + 2]; memcpy(p, str, nSubLength + 1); p[nSubLength + 1] = '/0'; } else { p = new char[nSubLength + 1]; memcpy(p, str, nSubLength); p[nSubLength] = '/0'; } std::cout<<p<<std::endl; return p; } void test() { const char* str = "阿里only巴巴"; subString(str, 3); subString(str, 4); subString(str, 5); subString(str, 6); subString(str, 8); subString(str, 9); subString(str, 10); subString(str, 11); subString(str, 12); }