C语言考前复习:字符串问题

文章介绍了C语言中字符串处理的多个技巧,包括使用scanf和gets的注意事项、空格处理、字符替换、插入、查找和删除功能,以及字符串反转和变量表示方法。
摘要由CSDN通过智能技术生成

1. 遇到输入多个字符串(不知道字符串个数时),不要用二维数组,用scanf的返回值判断。

while(scanf("%s",str)!=EOF)
{
     //执行语句;
}

2. scanf和gets同时输入时,记得使用getchar吃掉scanf的回车

scanf("%d",&a);
getchar();
gets(s);

3. scanf输入字符串时 ,无法读取空格。

4. 如果字符串需要提前终止,记得加"\0"

//1. 删除字符串之间的空格,并且计算空格数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Delspace(char* str)
{
	int i=0, j=0;
	while (*(str + i) != '\0')
	{
		if (*(str + i) != ' ') {
			*(str + j) = *(str + i);
			j++;
		}
		i++;
	}
	*(str + j) = '\0';
	return i - j;
}

int main()
{
	char str[100] = { 0 };
	printf("请输入字符串:");
	gets(str);
	int ch = Delspace(str);
	printf("%s\n", str);
	printf("%d\n", ch);
	return 0;
}

5. 字符串中相关字符修改时,需要修改的字符函数传参应传指针

//2. 编写程序,输入一个字符串s,接着再输入一个字符ch(测试数据保证ch一定会是小写字母),
//将字符串s 中所有的ch字符都改成其对应的大写字母。输出处理后的字符串。
//例如:输入:abcdaabMcAaB
//a
//输出 : AbcdAAbMcAAB
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Change(char* str, char* ch)
{
	int i = 0;
	while (*(str + i) != '\0')
	{
		if (*(str + i) == *ch)
		{
			*(str + i) = *ch - 32;
		}
		i++;
	}
}

int main()
{
	char str[100] = { 0 };
	printf("请输入字符串:");
	gets(str);
	printf("请输入需要修改的字符:");
	char ch;
	scanf("%c", &ch);
	Change(str,&ch);
	puts(str);
	return 0;
}
3. 字符串插入
字符串插入: “1234567890”
在第2个位置后面插入”ABC”
最终结果 : “12ABC34567890”
int main()
{
	char str[100] = { 0 };
	char s[10] = { 0 };
	int x;
	printf("请输入字符串:");
	gets(str);
	printf("请输入需要插入的位置:");
	scanf("%d", &x);
	printf("请输入需要插入的字符串:");
	scanf("%s", s);
	int len1 = strlen(str);
	int len2 = strlen(s);
	int i = 0,j=0;
	for (i = len2+len1 - 1; i >len2+ x-1; i--)
	{
		str[i] = str[i-len2];
	}
	for (i = x; i < x+len2; i++)
	{
		str[i] = s[j];
		j++;
	}
	str[len1 + len2] = '\0';
	puts(str);
	return 0;
}
4. 字符串查找
字符串查找: “123456123abc123hbc”
查找字符串”123”的数量。数量是3

int Search(char* str, char* s,int sz_str,int sz)
{
	int i = 0,j = 0,count = 0,num = 0;
	for (i = 0; i < sz_str; i++)
	{
		for (j = 0; j < sz; j++)
		{
			if (*(str + i + j) != *(s + j))
			{
				break;
			}
			else {
				count++;
			}
		}
		if (count == sz)
		{
			num++;
			i += sz-1;
			count = 0;
		}
	}
	return num;
}

int main()
{
	char str[100] = { 0 };
	char s[10] = { 0 };
	printf("请输入字符串:");
	gets(str);
	printf("请输入需要查找的字符串:");
	gets(s);
	int sz = strlen(s);
	int sz_str = strlen(str);
	int ch=Search(str, s,sz_str, sz);
	printf("%d\n", ch);
	return 0;
}
5.字符串删除: “1234567890”
删除”456” 最终结果 : “1237890”

void Delete(char* str, char* s,int sz_str,int sz_s)
{
	int i = 0,j=0,count=0,p=0;
	for (i = 0; i < sz_str; i++) {
		for (j = 0; j < sz_s; j++)
		{
			if (*(str + i + j) == *(s + j)) {
				count++;
			}
			else {
				break;
			}
		}
		if (count == sz_s) {
			p = i;
			break;
		}
	}
	for (i = p; i < sz_str-sz_s; i++) {
		*(str + i) = *(str + i + sz_s );
	}
	*(str + sz_str - sz_s ) = '\0';
}

int main()
{
	char str[100] = { 0 };
	char s[10] = { 0 };
	printf("请输入原字符串:");
	gets(str);
	printf("请输入需要删除的字符串:");
	gets(s);
	int sz_str = strlen(str);
	int sz_s = strlen(s);
	Delete(str, s, sz_str, sz_s);
	printf("%s\n", str);
	return 0;
}
6. 字符串反转
输入:12345abcde
输出:edcba54321
char* change(char* str,int sz)
{
	char* p = str+sz-1;
	int i = 0,j=0;
	for (i = sz-1;i>=0;i--)
	{
		*(p + j) = *(str + i);
		j++;
	}
	return p;
}

int main()
{
	char* str[100] = { 0 };
	printf("请输入原字符串:");
	gets(str);
	int sz = strlen(str);
	char* p = change(str, sz);
	printf("%s", p);
	return 0;
}

6. 字符串变量即为字符数组,但是在末尾会自动加上一个空字符来进行结尾标示。

7. 字符串指针不可以试图用来改变字符串的值

8. %.ps,用于显示字符串的一部分,p为要显示的字符数量。

    %ms%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。 若串长小于m,则左补空格。

9. 用puts显示字符串,其会自动在最后加上换行符。
    使用scanf输入字符串时,scanf("%s",str1);的str1前不用&,str1为数组名。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值