目录
3.查找一个字符串在另外一个字符串中出现的地址 abcccccde ccd
一、字符串函数
1.实现我的strlen()
#include <stdio.h>
int MyStrlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
str = '\0';
return count;
}
int main()
{
char str[] = "abcde";
printf("%d\n", MyStrlen(str));
return 0;
}
2.我的字符串拷贝
#include <stdio.h>
char* MyStrcpy(char* str1, char* str2)
{
char* pMark = str1;
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
*str1 = '\0';
return pMark;
}
int main()
{
char str[20];
char str1[] = "abcde";
printf("%s\n", MyStrcpy(str, str1));
return 0;
}
3.字符串拼接
#include <stdio.h>
char* MyStrCat(char* str1, char* str2)
{
char* pMark = str1;
while (*str1 != '\0')
{
str1++;
}
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
*str1 = '\0';
return pMark;
}
int main()
{
char str[10] = "abcd";
char* str1 = "1234";
printf("%s\n", MyStrCat(str,str1));
return 0;
}
4.字符串比较
#include <stdio.h>
int MyStrcmp(char* str1,char* str2)
{
/*while (*str1 != '\0' && *str2 != '\0') //第一种方法
{
if (*str1 > *str2)
{
return 1;
}
else if (*str1 < *str2)
{
return -1;
}
else
{
str1++;
str2++;
}
}
if (*str1 > *str2)
{
return 1;
}
else if (*str1 < *str2)
{
return -1;
}
else
{
return 0;
}*/
while (*str1 != '\0' || *str2 != '\0') //第二种方法
{
if (*str1 > *str2)
{
return 1;
}
else if (*str1 < *str2)
{
return -1;
}
else
{
str1++;
str2++;
}
}
return 0;
}
int main()
{
printf("%d\n", MyStrcmp("abc", "abc"));
printf("%d\n", MyStrcmp("ab", "abc"));
printf("%d\n", MyStrcmp("ac", "abc"));
return 0;
}
二、字符串练习
1.查找一个字符在另外一个字符串中第一次出现的下标
#include <stdio.h>
int T1(char* str, char ch)
{
int count = 0;
while (*str != '\0')
{
if (*str == ch)
{
return count;
}
str++;
count++;
}
return -1;
}
int main()
{
printf("%d\n", T1("abcd", 'b'));
return 0;
}
输出:
1 //因为为下表所以为第二个元素
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 4356)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
2.返回第一次的地址
#include <stdio.h>
char* T2(char* str, char ch)
{
while (*str != '\0')
{
if (*str == ch)
{
return str;
}
str++;
}
return NULL;
}
int main()
{
printf("%c\n",*T2("abcd",'b'));
return 0;
}
输出
b //因想要便于观察 所以用%c打印
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 17304)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
3.查找一个字符串在另外一个字符串中出现的地址 abcccccde ccd
#include <stdio.h>
#include <stdlib.h>
char* t3(char* str1, char* str2)
{
while (*str1 != '\0')
{
if (0 == strncmp(str1, str2, strlen(str2)))
{
return str1;
}
str1++;
}
return NULL;
}
int main()
{
printf("%s\n", t3("abcccccde", "ccd"));
return 0;
}
输出
ccde //因便于观察,所以用%c打印
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 22856)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
4.统计字符串中单词的个数
#include <stdio.h>
int T4(char* str)
{
int count = 0;
while (*str != '\0')
{
if (*str == ' ')
{
count++;
}
str++;
}
return count + 1;
}
int main()
{
printf("%d\n", T4("i love you"));
return 0;
}
输出
3
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 19016)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
5.将一个字符串插入到另一个字符串中
#include <stdio.h>
void T5(char* str1, char* str2, int n)
{
char* phead = str1 + n - 1;
char* pend = str1 + strlen(str2);
while(phead <= pend)
{
*(pend + strlen(str2)) = *pend;
pend--;
}
while (*str2 != '\0')
{
*phead = *str2;
phead++;
str2++;
}
}
int main()
{
char str[20] = "abcd";
T5(str, "12345", 3);
printf("%s\n", str);
return 0;
}
输出
ab12345cd
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 14688)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
6.翻转字符串
#include <stdio.h>
void T6(char* str)
{
char* pbegin = str;
char* pend = str + strlen(str) - 1;
while (pbegin < pend)
{
char ptemp = *pbegin;
*pbegin = *pend;
*pend = ptemp;
pbegin++;
pend--;
}
}
int main()
{
char str[20] = "abcd";
T6(str);
printf("%s\n", str);
return 0;
}
输出
dcba
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 9832)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
7.GetString()
#include <stdio.h>
#include <stdlib.h>
char* Getstring()
{
int size = 5;
char* str = (char*)malloc(sizeof(char) * size);
int count = 0;
char ch;
while ((ch = getchar()) != '\n')
{
str[count] = ch;
count++;
if (count == size)
{
size += 5;
str = realloc(str, size);
}
}
str[count] = '\0';
return str;
}
int main()
{
char* str = Getstring();
printf("%s\n", str);
free(str);
return 0;
}
输出
1234
1234
D:\c++\c语言\字符串\x64\Debug\字符串.exe (进程 18236)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .