C程序设计 (第四版) 谭浩强 习题 6.13
习题 6.13 编一程序,将两个字符串连接起来,不要用strcat函数。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:使用新数组连接两个字符数组,新数组范围要大于两个字符数组长度之和。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char str1[100], str2[100];
char newString[200];
printf("Enter string 1: ");
gets(str1);
printf("Enter string 2: ");
gets(str2);
printf("String 1: %s\n", str1);
printf("String 2: %s\n", str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
int i, j, k;
for(i = 0; i < len1; i++){
newString[i] = str1[i];
}
for(j = i, k = 0; j < len1 + len2; j++, k++){
newString[j] = str2[k];
}
newString[j] = '\0';
printf("New String: %s\n", newString);
system("pause");
return 0;
}
方法2:使用指针、函数的模块化设计
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 100
#define NEW 200
void initialStr(char **str1, char **str2, char **newStr, int n, int newLen){
*str1 = (char*)malloc(n * sizeof(char));
*str2 = (char*)malloc(n * sizeof(char));
*newStr = (char*)malloc(newLen * sizeof(char));
}
void inputStr(char *str, int n){
printf("Enter string %d: ", n);
gets(str);
}
void outputStr(char *str, int n){
if(n == 0){
printf("New String: %s\n", str);
}
else{
printf("String %d: %s\n", n, str);
}
}
void concatenate(char *str1, char *str2, char *newStr){
int len1 = strlen(str1);
int len2 = strlen(str2);
int i, j, k;
for(i = 0; i < len1; i++){
newStr[i] = str1[i];
}
for(j = i, k = 0; j < len1 + len2; j++, k++){
newStr[j] = str2[k];
}
newStr[j] = '\0';
}
void freeStr(char **str1, char **str2, char **newStr){
free(*str1);
free(*str2);
free(*newStr);
}
int main(){
char *str1 = NULL;
char *str2 = NULL;
char *newStr = NULL;
initialStr(&str1, &str2, &newStr, LEN, NEW);
inputStr(str1, 1);
inputStr(str2, 2);
outputStr(str1, 1);
outputStr(str2, 2);
concatenate(str1, str2, newStr);
outputStr(newStr, 0);
freeStr(&str1, &str2, &newStr);
system("pause");
return 0;
}