比较两个字符串之间的元素
Comparing elements between 2 strings
你好,假设我有 2 个字符串,"Today is a nice day" 和 "ao"。我想删除出现在第一个字符串中的第二个字符串的字符。
这是我的问题:
char c[20];
char p[10];
int i,j;
int l1,l2;
printf("Enter a string \n");
scanf("%s",cd);
printf("Enter another string \n");
scanf("%s",car);
len1 = strlen(cd);
len2 = strlen(car);
for (i=0;i<len1;i++){
for (j=0;j<len2;j++){
if (cd[i]==car[j]){
cd[i]="";
}
}
}
我想要的是第一个字符串像 "Tdy is nice dy"。所以我清空元素相同的位置,以便稍后重新定位。
显然 "cd[i]==car[j]" 无法在 C 上完成,我收到“从 'const char*' 到 'char' 的无效转换。
所以我几乎被困住了。我会感谢任何帮助。
1) 这是一个与您的算法尽可能接近的解决方案。
您所需要的只是一个额外的循环并替换无法用 cd[i]=0;
编译的 cd[i]="";
。编译器给出的错误与表达式 cd[i]="";
cd[i]
是字符类型有关,您不能将类型为 const char *
的字符串 ""
分配给 char 变量。 cd[i]
是一个字符 ""
是一个指针。
操作cd[i]=0;
给你想要的:我清空元素相同的位置,以便稍后重新定位。它将不需要的字符替换为0 .
#include <stdio.h>
#include <string.h>
int main()
{
char cd[] = "Today is a nice day";
char tmp[] = "Today is a nice day";
char car[] = "ao";
int i;
int j;
int k;
int len1 = strlen(cd);
int len2 = strlen(car);
for (i=0;i<len1;i++){
for (j=0;j<len2;j++){
if (cd[i] == car[j]){
cd[i]=0;
}
}
}
k = 0;
for (i=0; i<len1; i++)
{
if(cd[i] == 0)
{
}
else
{
tmp[k] = cd[i];
k++;
}
}
tmp[k] = 0; /* remember to terminate the tmp */
printf("%s\n", tmp);
strcpy(cd,tmp);
printf("%s\n", cd);
return 0;
}
输出:
Tdy is nice dy
Tdy is nice dy
或者,您可以跳过它,而不是用 0 清除不需要的字符。此解决方案如下:
#include <stdio.h>
#include <string.h>
int main()
{
char cd[] = "Today is a nice day";
char car[] = "ao";
int i;
int j;
int k = 0;
int skip = 0;
int len1 = strlen(cd);
int len2 = strlen(car);
for (i=0; i<len1; i++)
{
for (j=0; j<len2; j++)
{
if (cd[i] == car[j])
{
skip++; // make note that this character is not needed
}
}
if(skip == 0)
{
cd[k] = cd[i]; // copy the character
k++; // increase the position index
}
else
{
// skip the copy of charcter; clear the skip marker
skip = 0;
}
}
cd[k] = 0; // remember to terminate the new ck string!
printf("%s\n", cd);
return 0;
}
输出:
Tdy is nice dy
你好,假设我有 2 个字符串,"Today is a nice day" 和 "ao"。我想删除出现在第一个字符串中的第二个字符串的字符。
这是我的问题:
char c[20];
char p[10];
int i,j;
int l1,l2;
printf("Enter a string \n");
scanf("%s",cd);
printf("Enter another string \n");
scanf("%s",car);
len1 = strlen(cd);
len2 = strlen(car);
for (i=0;i<len1;i++){
for (j=0;j<len2;j++){
if (cd[i]==car[j]){
cd[i]="";
}
}
}
我想要的是第一个字符串像 "Tdy is nice dy"。所以我清空元素相同的位置,以便稍后重新定位。
显然 "cd[i]==car[j]" 无法在 C 上完成,我收到“从 'const char*' 到 'char' 的无效转换。
所以我几乎被困住了。我会感谢任何帮助。
1) 这是一个与您的算法尽可能接近的解决方案。
您所需要的只是一个额外的循环并替换无法用 cd[i]=0;
编译的 cd[i]="";
。编译器给出的错误与表达式 cd[i]="";
cd[i]
是字符类型有关,您不能将类型为 const char *
的字符串 ""
分配给 char 变量。 cd[i]
是一个字符 ""
是一个指针。
操作cd[i]=0;
给你想要的:我清空元素相同的位置,以便稍后重新定位。它将不需要的字符替换为0 .
#include <stdio.h>
#include <string.h>
int main()
{
char cd[] = "Today is a nice day";
char tmp[] = "Today is a nice day";
char car[] = "ao";
int i;
int j;
int k;
int len1 = strlen(cd);
int len2 = strlen(car);
for (i=0;i<len1;i++){
for (j=0;j<len2;j++){
if (cd[i] == car[j]){
cd[i]=0;
}
}
}
k = 0;
for (i=0; i<len1; i++)
{
if(cd[i] == 0)
{
}
else
{
tmp[k] = cd[i];
k++;
}
}
tmp[k] = 0; /* remember to terminate the tmp */
printf("%s\n", tmp);
strcpy(cd,tmp);
printf("%s\n", cd);
return 0;
}
输出:
Tdy is nice dy
Tdy is nice dy
或者,您可以跳过它,而不是用 0 清除不需要的字符。此解决方案如下:
#include <stdio.h>
#include <string.h>
int main()
{
char cd[] = "Today is a nice day";
char car[] = "ao";
int i;
int j;
int k = 0;
int skip = 0;
int len1 = strlen(cd);
int len2 = strlen(car);
for (i=0; i<len1; i++)
{
for (j=0; j<len2; j++)
{
if (cd[i] == car[j])
{
skip++; // make note that this character is not needed
}
}
if(skip == 0)
{
cd[k] = cd[i]; // copy the character
k++; // increase the position index
}
else
{
// skip the copy of charcter; clear the skip marker
skip = 0;
}
}
cd[k] = 0; // remember to terminate the new ck string!
printf("%s\n", cd);
return 0;
}
输出:
Tdy is nice dy