写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
时间: 2023-06-04 15:08:20 浏览: 107
好的,这是一个经典的字符串问题,我很乐意回答。下面是一个示例函数的实现:
bool isRotation(string s1, string s2) {
// 如果两个字符串长度不同,则肯定不可能旋转得到
if (s1.length() != s2.length()) {
return false;
}
// 将 s1 复制一倍,然后判断 s2 是否是连续两个 s1 的子串
string s = s1 + s1;
return (s.find(s2) != string::npos);
}
如果该函数返回 true,则表示 s2 是 s1 旋转得到的字符串,否则返回 false。例如,如果 s1 是 "coding",s2 是 "ingcod",则该函数应该返回 true。希望这能帮到你!
相关问题
用c语言写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
在C语言中,你可以使用如下的代码来判断一个字符串是否是另一个字符串旋转之后的字符串:
```
#include <stdio.h>
#include <string.h>
// 判断str1是否为str2旋转之后的字符串
// 如果是,返回1;否则返回0
int is_rotated(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2) {
return 0; // 长度不同,显然不是旋转字符串
}
char temp[2 * len1 + 1];
strcpy(temp, str1);
strcat(temp, str1); // 将str1复制到temp的后面
// 在temp中查找str2
// 如果能找到,说明str1是str2旋转之后的字符串
if (strstr(temp, str2) != NULL) {
return 1;
} else {
return 0;
}
}
int main() {
char str1[100] = "abcdefg";
char str2[100] = "cdefgab";
if (is_rotated(str1, str2)) {
printf("str2是str1旋转之后的字符串\n");
} else {
printf("str2不是str1旋转之后的字符串\n");
}
return 0;
}
```
上述代码实现的思路是:将字符串str1复制一份拼接到temp字符数组的末尾,然后在temp中查找str2。如果能找到,说明str1是str2旋转之后的字符串,否则不是。
用c语言写一个函数,判断一个字符串是否为回文字符串
好的,可以使用以下 C 语言代码实现判断一个字符串是否为回文字符串:
```c
#include <stdio.h>
#include <string.h>
int isPalindrome(char str[]) {
int len = strlen(str);
for (int i = 0; i < len/2; i++) {
if (str[i] != str[len-1-i]) {
return 0; // 不是回文字符串,返回0
}
}
return 1; // 是回文字符串,返回1
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
if (isPalindrome(str)) {
printf("%s 是回文字符串\n", str);
} else {
printf("%s 不是回文字符串\n", str);
}
return 0;
}
```
在上述代码中,`isPalindrome()` 函数接收一个字符串 `str`,返回一个整数值,1 表示 `str` 是回文字符串,0 表示 `str` 不是回文字符串。函数通过遍历字符串的前一半字符和后一半字符进行比较,如果发现不同则直接返回 0,否则遍历结束后返回 1。
在 `main()` 函数中,首先输入一个字符串,然后调用 `isPalindrome()` 函数判断它是否为回文字符串,并输出相应的结果。