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;
}