将字符串添加到特定位置
Add string to specific position
我是C的新手,我有一个基本的编码规则,如果字符串中有Z,我们添加另一个Z,如果没有Z,就重复
示例
输入:STZCK -> 输出:STZZCK
我设法添加了另一个 Z,但就在字符串的末尾,我必须在找到的 Z 之后添加。
我试过了
char * encoding (char * str){
int size = strlen(str);
for(int i=0; i<size; i++){
if(str[i] == 'Z'){
char ch = 'Z';
strncat(str, &ch, 1);
}
else if(str[i] != 'Z'){
str[i] = str[i];
}
}
return str;
}
提前致谢
您需要澄清您的函数是否接收到一个缓冲区,其中包含足够 space 用于输出字符串,或者您的函数是否需要动态分配内存。
第一种情况你可以这样做:
#include <stdio.h>
void encode(char *d, const char *s)
{
do {
*d++ = *s;
if (*s == 'Z') {
*d++ = *s;
}
} while (*s++ != 0);
}
int main(void) {
char *src[] = {"STZCK", "HELLO", "ZZ", "", NULL};
char dst[256];
for (char **s = src; *s != NULL; ++s) {
encode(dst, *s);
printf("%s -> %s\n", *s, dst);
}
return 0;
}
我会这样做
char* encoding(char* str) {
int len = strlen(str);
// count Z to see how much bigger the result will be
int countZ = 0;
for (int i = 0; i < len; i++) {
if (str[i] == 'Z') countZ++;
}
// make return string large enough
char* retStr = malloc(len + countZ + 1);
// copy old to new with added Zs
int retOff = 0;
for (int i = 0; i < len; i++) {
retStr[retOff++] = str[i];
if (str[i] == 'Z') retStr[retOff++] = 'Z';
}
retStr[retOff] = 0;
return retStr;
}
我是C的新手,我有一个基本的编码规则,如果字符串中有Z,我们添加另一个Z,如果没有Z,就重复
示例
输入:STZCK -> 输出:STZZCK
我设法添加了另一个 Z,但就在字符串的末尾,我必须在找到的 Z 之后添加。
我试过了
char * encoding (char * str){
int size = strlen(str);
for(int i=0; i<size; i++){
if(str[i] == 'Z'){
char ch = 'Z';
strncat(str, &ch, 1);
}
else if(str[i] != 'Z'){
str[i] = str[i];
}
}
return str;
}
提前致谢
您需要澄清您的函数是否接收到一个缓冲区,其中包含足够 space 用于输出字符串,或者您的函数是否需要动态分配内存。
第一种情况你可以这样做:
#include <stdio.h>
void encode(char *d, const char *s)
{
do {
*d++ = *s;
if (*s == 'Z') {
*d++ = *s;
}
} while (*s++ != 0);
}
int main(void) {
char *src[] = {"STZCK", "HELLO", "ZZ", "", NULL};
char dst[256];
for (char **s = src; *s != NULL; ++s) {
encode(dst, *s);
printf("%s -> %s\n", *s, dst);
}
return 0;
}
我会这样做
char* encoding(char* str) {
int len = strlen(str);
// count Z to see how much bigger the result will be
int countZ = 0;
for (int i = 0; i < len; i++) {
if (str[i] == 'Z') countZ++;
}
// make return string large enough
char* retStr = malloc(len + countZ + 1);
// copy old to new with added Zs
int retOff = 0;
for (int i = 0; i < len; i++) {
retStr[retOff++] = str[i];
if (str[i] == 'Z') retStr[retOff++] = 'Z';
}
retStr[retOff] = 0;
return retStr;
}