[英]C delete chars from string
我有要求輸入字符串(mystring)和字符(ch)的程序。 然后,它從字符串(mystring)中刪除所有輸入的字符(ch)。 例如“ abcabc”和字符“ a”,則結果應為“ bcbc”。 -當我使用scanf時,如果字符串沒有空格,則程序運行良好。 如果我輸入“ abc abc abc”,它將僅讀取和處理前3個字母(直到空格)。 然后建議我使用gets(mystr); 因為它可以讀取所有攪拌器 但是當我使用gets時,結果與輸入字符串相同,什么也沒發生。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main(int argc, char *argv[])
{
char mystr[N] ,result[N];
char ch;
int i,k;
k=0;
printf("enter string \n");
//gets(mystr);///////////////////////////
//scanf("%s",&mystr);///////////////////
printf("enter char \n");
scanf("%c",&ch);
scanf("%c",&ch);
for ( i = 0; i <= strlen(mystr); i++ )
{
if (mystr[i] != ch)
{
result[k]=mystr[i];
k++;
}
}
puts(result);
system("pause");
return 0;
}
scanf("%c",&ch);
scanf("%c",&ch);
第二個scanf
是您的問題。 它拾取您要刪除的字母之后輸入的換行符(並覆蓋ch
的先前值)。
擺脫它。
請注意,如手冊頁所述:
永遠不要使用gets() 。 因為無法不事先知道數據就無法知道將讀取多少個字符gets(),並且因為gets()將繼續存儲超過緩沖區末尾的字符,所以使用它非常危險。 它已被用來破壞計算機的安全性。 使用fgets()代替。
嗯-不知道是什么問題-使用getstr,但不對字符串使用scanf,它在Visual Studio中對我有用
int main(int argc, char *argv[])
{
char mystr[N] ,result[N];
char ch;
int i,k;
k=0;
printf("enter string \n");
gets(mystr);///////////////////////////
//scanf("%s",&mystr);///////////////////
printf("enter char \n");
scanf("%c",&ch);
// scanf("%c",&ch);
for ( i = 0; i <= strlen(mystr); i++ )
{
if (mystr[i] != ch)
{
result[k]=mystr[i];
k++;
}
}
puts(result);
system("pause");
return 0;
}
使用這個:
char temp[2];
scanf("%1s",temp);
ch = temp[0];
和使用gets
與char
s一起使用時, scanf
有一些問題(它獲得了“舊”新行)。 在這里,我們“作弊”了一點,我們使用scanf
來獲得一個字符串,該字符串最多可以包含一個字符。 一個1字符的字符串顯然需要第二個字符作為終止符,因此需要2個字符的數組。
請注意,使用scanf
搜索字符時,將無法插入空格字符。
請注意, gets
是一個“邪惡”函數。 您可以使用它輕松地進行緩沖區溢出(它不會檢查緩沖區是否足夠大)。 通常,“正確”的方法是: fgets(mystr, N, stdin);
( gets
的“文件”變體具有最多可讀取的字符數,並將在末尾附加\\0
)。 請注意,如果您在fgets
插入150個字符,則字符串中將包含99個字符(因為您提供了100個最大大小),將附加1x \\0
,其他字符將保留在緩沖區“ ready”中,以便進行下一個scanf
/ gets
/ fgets
...(進行測試,將緩沖區減小到一個較小的值,例如5個字符,並進行一些測試)
您可以按照xanatos的建議使用fgets()並進行一些改動,以便可靠地處理返回字符。 只需將使用fgets獲得的字符串中的'\\ n'更改為'\\ 0'。
並且在程序中,您忘記了以'\\ 0'終止新字符串。 所以這是您要查找的代碼。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int main(int argc,char **argv){
char string[N],str1[N];
char ch;
int i,k = 0;
fgets(string,N,stdin);
string[strlen(string)-1] = '\0';
scanf("%c",&ch);
printf("\n%s , %c",string,ch);
for (i=0;i<=strlen(string);i++)
if(string[i] != ch)
str1[k++] = string[i];
str1[k] = '\0';
printf("\n%s , %s\n",string,str1);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.