【发布时间】:2019-12-29 17:16:10
【问题描述】:
我正在尝试从用户那里获取 2 个字符串,第二个将是“针”复制到第一个字符串 例如: 字符串1(用户输入):八高运费 字符串 2(用户输入):八个 输出:八高fREIGHT
for example i want to print: toDAY is a good DAY
在堆栈中复制多个针时遇到问题 我曾尝试使用 while (*str) {其余函数与 str++} 我想要一些解释
#define _CRT_SECURE_NO_WARNINGS
#define N 101
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
void replaceSubstring(char* str, char* substr);
void main() {
int flag = 1;
char str[N], substr[N];
//char* str_ptr = &str, * substr_ptr = &substr; //creating pointer for the sake of while
while (flag) {
printf("\nEnter main text: ");
gets_s(str,N);
if (!str)
flag = 0;
printf("\nEnter sub-text: ");
gets_s(substr,N);
if (!str)
flag = 0;
replaceSubstring(str, substr);
printf("%s",str);
}
printf("\nExited. (press any key to exit)");
}
void replaceSubstring(char* str, char* substr) {
int lensbstr;
str = strstr(str, substr);
_strupr(substr); //cnvrt to UPPERCASE
lensbstr = strlen(substr); //length of the mutual string
if (str)
strncpy(str, substr, lensbstr);
}
【问题讨论】:
-
在
str = strstr(str, substr);行中,您将获得子字符串的第一次出现(如果存在)。只要你得到一个不为空的str,你就可以建立一个循环...... -
strncpy(str, substr, lensbstr);不会以 nul 结尾的结果字符串。 -
@wildplasser 你能解释一下吗?你是什么意思不会空终止? :
-
我错了。您对 stncpy() 的使用等同于具有相同参数的 memcpy()。顺便说一句:您是否意识到如果未找到子字符串,strstr() 将返回 NULL?