写在前面的话:
- 版权声明:本文为博主原创文章,转载请注明出处!
- 博主是一个小菜鸟,并且非常玻璃心!如果文中有什么问题,请友好地指出来,博主查证后会进行更正,啾咪~~
- 每篇文章都是博主现阶段的理解,如果理解的更深入的话,博主会不定时更新文章。
- 本文初次更新时间:2021.03.24,最后更新时间:2021.03.24
正文开始
1. 字符串逆序/反转字符串
描述(牛客网题目地址):
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
示例输入:
"abcd"
示例输出:
"dcba"
实现:
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
char* solve(char* str )
{
// write code here
int len = strlen(str);
for (int i = 0; i < len / 2; i++)
{
char temp = str[i];
str[i] = str[len-1-i];
str[len-1-i] = temp;
}
return str;
}
也可以:
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
char* solve(char* str )
{
// write code here
int len = strlen(str);
for (int i = 0; i < len / 2; i++)
{
char temp = *(str + i);
*(str + i) = *(str + len - 1 - i);
*(str + len - 1 - i) = temp;
}
return str;
}
2. 字符串中各单词的翻转
描述:
将字符串以单词为单位进行翻转,每个单词不翻转。
示例输入:
keep on going never give up
示例输出:
up give never going on keep
实现:
其实就是先将字符串整个翻转,然后再把每一个单词再翻转回来。
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1024
void reverse_string(char *src, int len)
{
for (int i = 0; i < len / 2; i++)
{
char temp = src[i];
src[i] = src[len-1-i];
src[len-1-i] = temp;
}
}
void reverse_word(char *src)
{
int len = 0;
while (*src != '\0')
{
if (*src == ' ')
{
reverse_string(src - len, len);
len = 0;
}
else
{
len++;
}
src++;
}
reverse_string(src - len, len);
}
int main()
{
char src[MAX_SIZE];
printf("Please input sentence:\n");
gets(src);
reverse_string(src, strlen(src));
reverse_word(src);
printf("src = %s\n", src);
return 0;
}
运行结果:
Please input sentence:
keep on going never give up
src = up give never going on keep
3. 判断字符串是不是回文
#include <stdio.h>
#include <string.h>
/**
* 判断是否是回文
* @return -1:参数无效,0:不是回文,1:是回文
*/
int isPalindrome(const char *str)
{
int ret = 0;
if (str == NULL)
{
return -1;
}
int len = strlen(str);
for (int i = 0; i < len / 2; i++)
{
if (str[i] == str[len-1-i])
{
return 1;
}
}
return ret;
}
int main()
{
char str1[] = "hello";
char str2[] = "level";
int ret = 0;
ret = isPalindrome(str1);
if (isPalindrome(str1))
{
printf("%s is palindrome.\n", str1);
}
else
{
printf("%s is not palindrome.\n", str1);
}
ret = isPalindrome(str2);
if (isPalindrome(str2))
{
printf("%s is palindrome.\n", str2);
}
else
{
printf("%s is not palindrome.\n", str2);
}
return 0;
}
运行结果:
hello is not palindrome.
level is palindrome.
4. 删除字符串中的子串
描述:
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入示例:
Tomcat is a male ccatat
cat
输出示例:
Tom is a male
实现:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 80
void delSubString(char *str, char *sub)
{
int len = strlen(str); //原字符串长度
int slen = strlen(sub); //子串长度
char *p = strstr(str, sub); //指向字串在原字符串中出现的首字符
while (p)
{
for (int i = p - str; i < len - slen + 1; i++)
{
str[i] = str[i+slen];
}
len = strlen(str);
p = strstr(str, sub);
}
}
int main()
{
char str[MAX_SIZE];
char subStr[MAX_SIZE];
gets(str);
gets(subStr);
delSubString(str, subStr);
printf("result string = %s\n", str);
return 0;
}
运行结果:
Tomcat is a male ccatat
cat
result string = Tom is a male
未完待续~~~
参考
暂无