请帮我完善C语言以下程序 题目:已知字符串subStr为str的子串,在母串str中找出subStr,在其前面插入一 个'@'字符,需保持子串内容完整性。 例如:在"Goqqqq;Comeqqq.com"中找到"qq"后,将字符串改变为: "Go@qq@qq;Come@qqq.com" #include<stdio.h> #include<string.h> #include<math.h> #include<ctype.h> #include<stdlib.h> void changeStr(char str[],char subStr[]) { int i=0,j,k,pop,len,lenSub; len=strlen(str); lenSub=strlen(subStr); while(str[i]!=0) { j=0; k=i; while(str[k]==subStr[j]&&subStr[j]!=0) { k++; j++; /**********Program**********/ /********** End **********/ } i++; } } int main() { char str[100]="Goqqqq;Comeqqq.com", subStr[10]="qq"; changeStr(str,subStr); puts(str); return 0; }
时间: 2023-04-07 14:02:14 浏览: 302
以下是程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], subStr[20], newStr[120];
int i, j, k, len1, len2;
printf("请输入母串:");
scanf("%s", str);
printf("请输入子串:");
scanf("%s", subStr);
len1 = strlen(str);
len2 = strlen(subStr);
for (i = 0, j = 0; i < len1; )
{
k = i;
while (str[k] == subStr[j] && j < len2)
{
k++;
j++;
}
if (j == len2)
{
newStr[i] = '@';
i++;
j = 0;
while (j < len2)
{
newStr[i] = subStr[j];
i++;
j++;
}
}
else
{
newStr[i] = str[i];
i++;
j = 0;
}
}
newStr[i] = '\0';
printf("新字符串为:%s\n", newStr);
return 0;
}
程序思路:
1. 定义三个字符数组:str、subStr、newStr,分别用于存放母串、子串和新字符串。
2. 从键盘输入母串和子串。
3. 分别计算母串和子串的长度。
4. 用循环遍历母串中的每个字符,同时用另外两个变量i和j分别记录当前遍历到的位置和子串中已经匹配的字符数。
5. 如果当前字符与子串中对应位置的字符相同,则继续匹配下一个字符,直到子串中的所有字符都匹配成功。
6. 如果子串中的所有字符都匹配成功,则在新字符串中插入一个'@'字符,并将子串中的所有字符依次插入到新字符串中。
7. 如果当前字符与子串中对应位置的字符不同,则直接将当前字符插入到新字符串中。
8. 最后将新字符串输出。
注意事项:
1. 本程序只能处理子串在母串中出现一次的情况。
2. 如果子串中包含'@'字符,则可能会出现错误。
阅读全文