<1.字符串拷贝>
思路分析:
a. 确定被拷贝的数组的内存大小是否小于等于目标数组的内存大小;
b. 拷贝数组;
c. 目标数组最后一个字符为空字符(‘\0’)。
//str1:被拷贝的数组 str2:目标数组 len:目标数组的长度
bool stringCopy(char* str1,char* str2,int len)
{
int i = 0;
while (str1[i]!='\0')
{
i++;
}
if (i>len)
{
return false;
}
i = 0;
while (str1[i]!='\0')
{
str2[i] = str1[i];
i++;
}
str2[i] = '\0';
return true;
}
void printF(char* str1,char* str2)
{
cout <<"str1:"<< str1 << endl;
cout <<"str2:"<< str2 << endl;
}
int main()
{
char str1[] = "abc";
char str2[10] = {0};
//----拷贝
stringCopy(str1, str2, 10);
printF(str1, str2);
return 0;
}
<2.字符串连接>
- 将str1与str2连接—->(将合成的字符串放入str1中)
思路分析:
a. 确定str1的内存大小是否小于str1+str2-1;
b. 连接;
c. 连接后的字符串最后一个为空字符(‘\0’)。
//str1-->存放最终连接字符串的数组 ,len--->str1的内存大小
bool stringConnection(char* str1,int len,char* str2)
{
int i = 0;
int k = 0;
while (str1[i]!='\0')
{
i++;
}
while (str2[k] != '\0')
{
k++;
}
if (len<i+k-1)
{
return false;
}
//连接
k = 0;
while (str2[k] != '\0')
{
str1[i] = str2[k];
i++;
k++;
}
str1[i] = '\0';
return true;
}
void printF(char* str1,char* str2)
{
cout <<"str1:"<< str1 << endl;
cout <<"str2:"<< str2 << endl;
}
int main()
{
char str1[20] = "abc";
char str2[10] = "def";
stringConnection(str1, 20, str2);
printF(str1, str2);
return 0;
}
- 将str1与str2连接放入到str3中
思路分析:
a. 确定str3的大小是否小于str1+str2-1;
b. 放入到str3中—–>(每个字符串一次放入);
c. str3最后一个字符为空字符(‘\0’)。
//target:目标数组 len: 目标数组的长度
bool stringConnection(char* str1, char* str2, char* target,int len)
{
int i = 0;
int k = 0;
while (str1[i] != '\0')
{
i++;
}
while (str2[k] != '\0')
{
k++;
}
if (len<i + k - 1)
{
return false;
}
//连接放入
i = 0, k = 0;
while (str1[i] != '\0')
{
target[i] = str1[i];
i++;
}
while (str2[k] != '\0')
{
target[i] = str2[k];
i++;
k++;
}
//最后一个字符为空字符
target[i] = '\0';
return true;
}
void printF(char* str1,char* str2)
{
cout <<"str1:"<< str1 << endl;
cout <<"str2:"<< str2 << endl;
}
void printFP(char* str1, char* str2,char* str3)
{
cout << "str1:" << str1 << endl;
cout << "str2:" << str2 << endl;
cout << "str3:" << str3 << endl;
}
int main()
{
char str1[10] = "abc";
char str2[10] = "def";
char str3[20] = {0};
stringConnection(str1,str2, str3, 20);
printFP(str1, str2,str3);
return 0;
}
<3.字符串大小写转换>
(大写转小写)思路分析:
a. 遍历不是空字符的字符, 将其中的大写字母转换为小写字母;
//--true:表示转换成功 false:表示转换失败
//A:65 Z:90
bool stringCase(char* str1,char* str2,int len )
{
int i = 0;
while (str1[i] != '\0')
{
i++;
}
if (i>len)
{
return false;
}
i = 0;
while (str1[i]!='\0')
{
if (str1[i]>='A'&&str1[i]<='Z')
{
str2[i] = str1[i] + 32;
}
else
{
str2[i] = str1[i];
}
i++;
}
str2[i] = '\0';
return true;
}
void printF(char* str1,char* str2)
{
cout <<"str1:"<< str1 << endl;
cout <<"str2:"<< str2 << endl;
}
void printFP(char* str1, char* str2,char* str3)
{
cout << "str1:" << str1 << endl;
cout << "str2:" << str2 << endl;
cout << "str3:" << str3 << endl;
}
int main()
{
char str1[10] = "aBC";
char str2[10] = {0};
stringCase(str1, str2, 10);
printF(str1, str2);
return 0;
}
注意: 小写转大写就是字符-32;
我们还可以用二进制的方法来大小写转换:
bool stringBinaryCase(char* str1, char* str2, int len)
{
int i = 0;
while (str1[i] != '\0')
{
i++;
}
if (i>len)
{
return false;
}
i = 0;
while (str1[i] != '\0')
{
if (str1[i] >= 'A'&&str1[i] <= 'Z')
{
str2[i] = str1[i] | 32;
}
else
{
str2[i] = str1[i];
}
i++;
}
str2[i] = '\0';
return true;
}
注意:使用二进制对字符串大小写转换时原则:
a. 大写转化为小写——–>或操作符(|) 和32;
b. 小写转化为大写——–>且操作符(&)和95;
<4.字符串比较大小>
思路分析:
a. 首先是判断两个字符串的长度;
b. 然后根据长度来分别比较;
c. 若长度相同,再根据每个字符来比较。
//字符串比较大小 0-->相等 -1--->str2大 1--->str1大
int stringCompare(char* str1,char* str2)
{
int i = 0, k = 0;
while (str1[i] != '\0')
{
i++;
}
while (str2[k] != '\0')
{
k++;
}
if (i>k)
{
return 1;
}
else if(i<k)
{
return -1;
}
else //表示两个字符串的长度相同
{
i = 0;
//遍历每个字符
while (str1[i]!='\0')
{
if (str1[i] != str2[i])
{
if (str1[i]>str2[i])
{
return 1;
}
else
{
return -1;
}
}
i++;
}
return 0;
}
}
----------
<5.字符串分隔>
思路分析:
a. 直接遍历字符串中的每个字符。
//瑕疵就是确保每个被分隔的字符串必须小于20
int stringSeparated(char* str1,char separate,char p[][20])
{
int i = 0;
int k = 0; //二维数组的第几行
int n = 0; //每行的字符
while (str1[i]!=’\0’)
{
if (str1[i]!=separate)
{
p[k][n] = str1[i];
i++;
n++;
}
else
{
p[k][n] = ‘\0’;
i++;
k++;
n = 0;
}
}
return k + 1;
}
void printF(char* str1,char* str2)
{
cout <<”str1:”<< str1 << endl;
cout <<”str2:”<< str2 << endl;
}
void printFP(char* str1, char* str2,char* str3)
{
cout << “str1:” << str1 << endl;
cout << “str2:” << str2 << endl;
cout << “str3:” << str3 << endl;
}
int main()
{
char str1[20] = “abc,def,ghi”;
char p[4][20] = {0};
int x=stringSeparated(str1, ‘,’, p);
cout << “x=” << x << endl;
for (int i=0;i