【发布时间】:2015-12-23 16:34:11
【问题描述】:
我需要写什么:
1.从用户那里获取主字符串。
2.从用户那里获取一个子字符串。
每次匹配主字符串中的子字符串,将其字母改为大写。
不要使用像strstr这样的字符串函数。
例如:
主字符串:abcdeffghfhkfff
子字符串:ff
输出:abcdeFFghfhkFFf
问题:好吧,在找到一个匹配项后,我无法继续编写代码。例如,在主字符串中找到第一个“f”后,如何继续检查第二个“f”是否与找到的“f”相邻,如果不是,则尝试找到另一个“f”并检查后续匹配项直到我们发现子字符串的长度与字符串中后续匹配的数量相匹配?这是我尝试过的,在'replaceSubstring'函数中编写for循环的逻辑
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <string.h>
#define N 101
void replaceSubstring(char *str, char *subStr);
void main()
{
char str[N], subStr[N];
while (strlen(str) != 0 || strlen(subStr) != 0)
{
str[0] = 0;
printf("Enter text: ");
gets(str);
printf("Enter substring: ");
scanf("%s", subStr);
replaceSubstring(str, subStr);
}
}
void replaceSubstring(char *str, char *SubStr)
{
int i, count = 0, j = 0, k = 0;
for (i = 0; i <= strlen(str); i++)
{
if (str[i] == SubStr[k])
{
k++;
count++;
if (count == strlen(SubStr))
{
str[i] -= 32;
}
}
}
puts(str);
getchar();
}
【问题讨论】:
-
你忘记在不匹配之后重置
k = 0,并且在成功之后。 -
旁白:
for (i = 0; i <= strlen(str); i++)迭代太远,for (i = 0; i < strlen(str); i++) -
尝试将问题分解为较小的问题。例如:大小为 Len 的 SubSring 是否可以在从位置 Pos 开始的 String 中找到?从位置 Pos. 开始更改 String 中 L 字母的大小写。
-
要意识到的主要事情是您必须首先搜索第一个字符匹配,然后检查字符串其余部分的匹配。使用第二组计数器来匹配字符串的其余部分,这样您就不会失去在主字符串中的位置。为了澄清这个过程,你甚至可以使用第二个函数来匹配字符串的其余部分和大写
-
感谢您的 cmets。我已经升级了我的代码。 @WeatherVane
标签: c