C语言——字符串专项练习

1.给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)。

样例:

对于字符串 "abcdefg".

offset=0 => "abcdefg"

offset=1 => "gabcdef"

offset=2 => "fgabcde"

offset=3 => "efgabcd"

要求使用函数:

void rotateString(char *str, int offset)

#include<stdio.h>
#include<string.h>

void rotateString(char* str,int offset)
{
	int i,n=0;
	char temp[100] = { 0 };
	if (str == NULL)
		printf("error!");
	else
	{
		n = strlen(str);
		for (i = 0; i < n - offset; i++)
		{
			temp[i + offset] = str[i];
		}
		for (i = 0; i < offset; i++)
		{
			temp[i] = str[n - offset + i];
		}
	}
	for (i = 0; i < n; i++)
	{
		str[i] = temp[i];
	}
}

int main()
{
	char str[100];
	int offset,i;
	printf("Please enter the string:");
	gets_s(str);
	printf("Please enter offset:");
	scanf_s("%d", &offset);
	rotateString(str, offset);
	printf("The results:");
	for (i = 0; *(str + i) != '\0'; i++)
	{
		printf("%c", *(str + i));
	}
	return 0;
}

 2. 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

#include<stdio.h>
#include<string.h>

int main()
{
	char a[100] = { 0 }, b[200] = { 0 };
	printf("Please enter a sentence:");
	gets_s(a);
	int i,len,sum=0,length=0,k;
	len = strlen(a);
	for (i = 0; a[i] != '\0'; i++)
	{
		if (a[i] == ' ')
			sum++;
	}
	length = len + 2 * sum;
	for (i = 0,k=0; i < len; i++)
	{
		if (a[i] == ' ')
		{
			b[k] = '%';
			k++;
			b[k] = '2';
			k++;
			b[k] = '0';
			k++;
		}
		else
		{
			b[k] = a[i];
			k++;
		}
	}
	for (i = 0;b[i]!='\0'; i++)
		printf("%c", b[i]);
	return 0;
}

 

3. 输入一字符串,字符串中有若干单词数,其中一个单词定义为不含空格的连续字符串。1)统计字符串中的单词个数。2)计算最后一个单词的长度。

要求编写子函数来完成。

样例:

输入: "Hello, my name is John"

输出: 5 (单词个数)

         4 (最后一个单词长度)

函数原型:

int countSegments(char *s);

int lengthOfLastWord(char *s);

#include<stdio.h>
#include<string.h>

int countSegment(char* s)
{
	int i,word=0,num=0;
	for (i = 0; s[i] != '\0'; i++)
	{
		if (s[i] == ' ')
			word = 0;
		else if (word == 0)
		{
			word = 1;
			num++;
		}
		else continue;
	}
	return num;
}

int lengthOfLastWord(char* s)
{
	int len,i,num=0;
	len = strlen(s);
	i = len - 1;
	while(s[i] == ' ')
	{
		i--;
		if (s[i] != ' ')
			break;
		else continue;
	}
	for (;s[i]!=' '; i--)
	{
		num++;
	}
	return num;
}

int main()
{
	char a[100];
	printf("Please enter a sentence:");
	gets_s(a);
	int count=0, length=0;
	count = countSegment(a);
	length = lengthOfLastWord(a);
	printf("Words:%d\n", count);
	printf("Length of Last Word:%d\n", length);
	return 0;
}

 

4. 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。如果存在,返回target字符串中第一个字符在source中的索引值。(下标从0开始)。

样例:

如果 source = "source" 和 target = "target",返回 -1。

如果 source = "abcdabcdefg" 和 target = "bcd",返回 1。

#include<stdio.h>
#include<string.h>

int search(char *a,char *b)
{
	int i,flag=0,k=0,len,t=0;
	len = strlen(b);
	i = 0;
	for (k = 0;b[k]!='\0'&& a[i] != '\0';)
	{
		if (b[k] == a[i])
		{
			i++;
			k++;
			flag++;
		}
		else
		{
			i++;
		}
	}
	if (flag == len)
	{
		for (i = 0; a[i] != '\0'; i++)
		{
			if (a[i] == b[0])
			{
				t = i;
				break;
			}
		}
		return t;
	}
	else return -1;
}

int main()
{
	char a[100], b[100];
	printf("Please enter the first string:");
	gets_s(a);
	printf("Please enter the second string:");
	gets_s(b);
	int result;
	result = search(a, b);
	printf("The result is:%d",result);
	return 0;
}

 

5.比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是大写字母.

样例:

给出 A = "ABCD", B = "ACD",返回1.

给出 A = "ABCD",B = "AABC", 返回0.

#include<stdio.h>
#include<string.h>

int check(char A[],char B[])
{
	int i,j,k,flag=0,t;
	int len1, len2;
	char temp;
	len1 = strlen(A);
	len2 = strlen(B);
	for (j = 0;j<len1-1;i++)
	{
		for (i = 0; i < len1 - j - 1; j++)
		{
			if (A[i] >= A[i + 1])
			{
				temp = A[i];
				A[i] = A[i + 1];
				A[i + 1] = temp;
			}
		}
	}
	for (j = 0; j < len2 - 1; i++)
	{
		for (i = 0; i < len2 - j - 1; j++)
		{
			if (B[i] >= B[i + 1])
			{
				temp = B[i];
				B[i] = B[i + 1];
				B[i + 1] = temp;
			}
		}
	}
	for (k = 0; B[k] != '\0' && A[i] != '\0';)
	{
		if (B[k] == A[i])
		{
			i++;
			k++;
			flag++;
		}
		else
		{
			i++;
		}
	}
	if (flag == len2)
	{
		for (i = 0; A[i] != '\0'; i++)
		{
			if (A[i] == B[0])
			{
				t = i;
				break;
			}
		}
		return 1;
	}
	else return 0;
}

int main()
{
	char A[100], B[100];
	int t;
	printf("Please enter A:");
	gets_s(A);
	printf("Please enter B:");
	gets_s(B);
	t = check(A, B);
	printf("The result:%d\n", t);
	return 0;
}

 

 

6. 给定一个字符串,判断其是否为一个回文串。只考虑字母和数字,忽略大小写。

样例:

"A man, a plan, a canal: Panama" 是一个回文串。

"race a car" 不是一个回文串。

#include<stdio.h>
#include<string.h>

int main()
{
	char a[200], t[200] = { 0 };
	printf("Please enter a sentence:");
	gets_s(a);
	int i, k, flag=0,len;
	for (i = 0,k=0; a[i] != '\0'; )
	{
		if (a[i] >= 'A' && a[i] <= 'Z')
		{
			a[i] = a[i] + 32;
		}
		t[k] = a[i];
		if (a[i] < 'a' || a[i]>'z')
			i++;
		else
		{
			i++;
			k++;
		}
	}
	len = strlen(t);
	for (i = 0; t[i] != '\0'; i++)
	{
		if (t[i] == t[len - i - 1])
			flag++;
	}
	if (flag == len)
		printf("It's a Palindrome String!!! ");
	else
		printf("It's not a Palindrome String... ");
	return 0;
}

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值