如何替换单引号'为两个单引号'' ?

rogerwux 2008-05-14 11:33:38
我有一个char *指针指向一堆数据(包含单引号')
现在需要替换所有的单引号为两个单引号''
请教怎么替换? 谢谢!
...全文
635 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chlaws 2008-05-16
  • 打赏
  • 举报
回复

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
char input[256] = "\0";
char output[300] = "\0";
char *pt = output;
char *p;
FILE *fin,*fout;

fin = fopen("src.dat","rb"); //要读取内容的文件名
fout = fopen("dst.dat","wb"); //写入新文件
if(fin == NULL || fout == NULL)
{
exit(1);
}

while(!feof(fin))
{
input[0] = '\0';
output[0] = '\0';
fread(input,254,1,fin);

p = strtok(input, "'");

while( p != NULL )
{
strcat(output,p);
pt = output;

while( *pt++ != '\0');
{
pt--;
*pt++ = '\'';
*pt++ = '\'';
*pt = '\0';
//puts(output);
}
p = strtok(NULL, "'");
}
pt = pt-2;
*pt = '\0';
puts(output);
fflush(stdin);

if(fwrite(output,strlen(output),1,fout) == 0)//判断是否写入失败
getch();


}

fclose(fin);
fclose(fout);
return 0;
}

//////////////////////////////////////////
//result:
\ \n\r

$.\'' \",#(7),01444\''9=82<.342踈0?郳0JFIF\0\0\0\0\0\
00*Intel(R) JPEG Library, version 1,5,4,36\0踈0CC
\r\r2!!22222222222222222222222222222222222222222222222222?0\0\
0\0\0\0\0\0\0\0 \n
\0\0\0}\0!1AQa\"q2亼?#B绷R佯$3br?\n\%&\''()*456789:
CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉
肿刭卺忏溴骁栝犟蝮趱鲼?\0\0\0\0\0\0\0 \n

\0\0w\0!1AQaq\"2?B憽绷 #3R?br裓n$4醆%?&\''()*56789
:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉
罩棕仝忏溴骁栝牝篝貊鼬繺\0d\0d\"\0赲0\0\0?\0?x3路^瘐徘喆i
L秠$捖&
gc扞+扞颷燄倄?M\0?\0?x蘒鐔快k\0篭n\0?\0??齖n???\0鈎\0??\0?h??\0
壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\
0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0鵖沔摝柁:
狈音鸎L嵹;XV\%-媸2B€3
€9?鍀?磜鼣;?G\0??伏 \0$竺\_鯸n?\0袺]p?眖4鹈勐\%a仁Q庝X損柔NH
钖cG*磏2?0霢iM騖%\''元q鏽+“为9`*紖O呦也NI?歮s猴?ufD?缇*誤兊?…熔z
苉JSr芪?F薻z啤i狵凳?aLa彬凖k殯?癧Ms6?qCpm潔?恥\0卥鴱\\恥鑬耱瓁志s岘OG坒
\0衆rtR+?#;?磨樐
]剻d1榥a??巍?\0憥!\\伏价WIS抗峏蒶┹N? 韝蝴O醁:y艝?6?觚??*閄Xwds驰
屮屟]蟡u?伶鶓?嗥 q摿?矿?]陹?涗秌?l姤U蕇瀪??萅Ж祟诚Z椓鈂rj?钮1N鸔?
\0旧黬*徙nI弧┗?\0扑榈/h譿2嗓\0?惴壹谓鉢0频忴?鲴=y誶瓓>埔釂\_匎{剠釓
N磄Ib??\\?剥]
9螝坁h?+*?@nz蹼?詾€茳0?V陧[n~V騑?灑臣7)昻娙?敋0b(鸜F 蒹2悾??SǒE?
?鉣y珇︽趎=?\0QHq焭??娬眗著=?U?邦煃iI贔U曘s 垡裎?輁_笸rrx7A笧鈟lwKp扭c+騅n$
s?樸#‘穃_\_鵀Nq纤?鱁TU=v淲L[M劁g沰0E巅賛mt窻蜠tW暐\%芒?呦a炚.嫟鴇Zy狠ゥ溑稤弎\"
噺\r唖?
N}?汁3阇#箃益氄|?傎?尪8??A沧}\_蘡c 來?根?-憣?\nT\''z彏N签墹?-A]Z锂恐タ\
''?=宗-^驺腆鞮wy€嗐v9zt??:腛umh?厄IId\n\0^O錦\啗釢/Z?骚亟緭f豬|苚窗=塡''
邈蔽= 鬕懚謈鑷鵙鴶涆╀GS羱2葁C驱\0J\''?疐s環$g兀樽蟐sX瓓>唣/鼡蟎r
??\0E-S2Og琝%
A寤J泵*3終/Rq笘儒€趡鮘\餦''鼡蟎r??\0E-f牮汷夆筴e戔歽$??腟hbF<.7q摑i菤耦塷
暕?3灤?)阋C{T謲嫊<笈G帵湽WV嘌?b褏??2?5煫X蒈i峔r澚唙U+\"筣紓y佴g
揦慶簴?丫7T洙闔\''├陠眎v哱rZ鼏噇?;暩羘?譩k[渏椹&?
xoR?2$笽-?<槤奔曺癋3亴謂结絉株?g槯偬穡?
艕yo‰廽朦\%\i?on镤濧?栢酣莭\_[浴x/,RI<駆司9v`?熄?\0氕)‥Y猹苫谨锈-婈
贘i?煣}奤y
眿瓹g怚鐑撝簕?濫c縞`鱓6塷o╆(?觨s€XdG-幑\0c姚氁嬉?\_9\0I/?\\駛~O\_
cNs媞N如鰊=O#\0!??\0g?疍s|??甄u??\0?鹱齻?鬜?U厒FQ?妑虡\\卜?

?FP\0?鹱齻?鬜諒?絼w0 H逼Py泿凸~?弻懭Cp鴷墯鱄鈶\%xZubr2欑庛垡瀦
UM畁舾$欻\''旑磉|d a粚蟸氮?~?齥扨|蚗韰H颚賁方9Q茚T撿+E-\"N鳗駧斦浜擘<灼$
:?}║!H,0z翮帣fウ\\Z]GxCn^#\nT9蕦幗?綷"跪髶盭ch麳х\\?E璿,j\0剎?
汶盈|z盐''s
]*塍,?v?皩:?縍?:螙驸鈌杋I\0?躾?李;饈j绳ヽ???1霃诗KtmXf@c?侫S?詂?&
4?iA?徧#+?岤帲鵥燊硋!\_.F?,樔U\0摓=?z琝%骕C!]蠃P\0\0镓騸圍MЩGh蹎椰?l?熕穤?
搮?戞?\0????魘蹒U锜\0????魘蹒u躣}苦O鵟''?\0癠奪輺(鎵5?eq怗?呧O鵟''
?\0癠奪?\0\n0
牓\0(\0图?紹v氷蠯#c$籿靔缠CAA呌恦巅黭n奬0萛_
枞r禶:HC醈醢S邨o癍??Q??0}櫩茣|)"lK?限秇>Zm〕裰沷n沑"M&=珤q弞
騔??﨡圐偅\0巡讖??煆?汛k.逴褮
+x磴i!敱TP牅Hp=\\\0啂駠?t?7\0?=凗;?鬨r?\0锬唿v忴h?型
?

n0
/////////////////////////////////////////////
sailinghz 2008-05-16
  • 打赏
  • 举报
回复
学习
帅得不敢出门 2008-05-16
  • 打赏
  • 举报
回复
我有个疑问 如果有连续好几个'排在那 这时候要不要替换呢??
ky000 2008-05-16
  • 打赏
  • 举报
回复
学习中...
clhposs 2008-05-16
  • 打赏
  • 举报
回复
string s;
cin>>s;

搜索 如果找到一个'就insert ''
lixun_21 2008-05-16
  • 打赏
  • 举报
回复
打开文件 读一个字符写一个字符到另一个文件
如果遇到 单引号 则连续写两次
shuice 2008-05-16
  • 打赏
  • 举报
回复
\"
strstr
CString::Replace
rogerwux 2008-05-16
  • 打赏
  • 举报
回复
谢谢各位达人的例子。。。

一个大问题是 怎么替换掉所有的单引号为2个单引号在下面的数据中
谢谢!!!

数据为:


\0 \n\r

$.\' \",#(7),01444\'9=82<.342踈0?郳0JFIF\0\0\0\0\0\00*Intel(R) JPEG Library, version 1,5,4,36\0踈0CC
\r\r2!!22222222222222222222222222222222222222222222222222?0\0\0\0\0\0\0\0\0\0 \n
\0\0\0}\0!1AQa\"q2亼?#B绷R佯$3br?\n\%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼?\0\0\0\0\0\0\0 \n
\0\0w\0!1AQaq\"2?B憽绷 #3R?br裓n$4醆%?&\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉罩棕仝忏溴骁栝牝篝貊鼬繺0\0d\0d\"\0赲0\0\0?\0?x3路^瘐徘喆iL秠$捖&gc扞+扞颷燄倄?M\0?\0?x蘒鐔快k\0篭n\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0?\0??齖n???\0鈎\0??\0?h??\0壆倞\0鵖沔摝柁:狈音鸎L嵹;XV\%-媸2B€3€9?鍀?磜鼣;?G\0??伏 \0$竺\_鯸n?\0袺]p?眖4鹈勐\%a仁Q庝X損柔NH钖cG*磏2?0霢iM騖%\'元q鏽+“为9`*紖O呦也NI?歮s猴?ufD?缇*誤兊?…熔z苉JSr芪?F薻z啤i狵凳?aLa彬凖k殯?癧Ms6?qCpm潔?恥\0卥鴱\\恥鑬耱瓁志s岘OG坒\0衆rtR+?#;?磨樐]剻d1榥a??巍?\0憥!\\伏价WIS抗峏蒶┹N? 韝蝴O醁:y艝?6?觚??*閄Xwds驰屮屟]蟡u?伶鶓?嗥 q摿?矿?]陹?涗秌?l姤U蕇瀪??萅Ж祟诚Z椓鈂rj?钮1N鸔?\0旧黬*徙nI弧┗?\0扑榈/h譿2嗓\0?惴壹谓鉢0频忴?鲴=y誶瓓>埔釂\_匎{剠釓N磄Ib??\\?剥] 9螝坁h?+*?@nz蹼?詾€茳0?V陧[n~V騑?灑臣7)昻娙?敋0b(鸜F 蒹2悾??SǒE??鉣y珇︽趎=?\0QHq焭??娬眗著=?U?邦煃iI贔U曘s楍垡裎?輁_笸rrx7A笧鈟lwKp扭c+騅n$s?樸#‘穃_\_鵀Nq纤?鱁TU=v淲L[M劁g沰0E巅賛mt窻蜠tW暐\%芒?呦a炚.嫟鴇Zy狠ゥ溑稤弎\"噺\r唖怤}?汁3阇#箃益絺氄|?傎?尪8??A沧}\_蘡c 來?根?-憣?\nT\'z彏N签墹?-A]Z锂恐タ\'?=宗-^驺腆鞮wy€嗐v9zt??:腛umh?厄IId\n\0^O錦\啗釢/Z?骚亟緭f豬|苚窗=塡'邈蔽= 鬕懚謈鑷鵙鴶涆╀GS羱2葁C驱\0J\'?疐s環$g兀樽蟐sX瓓>唣/鼡蟎r??\0E-S2Og琝%A寤J泵*3終/Rq笘儒€趡鮘\餦'鼡蟎r??\0E-f牮汷夆筴e戔歽$??腟hbF<.7q摑i菤耦塷暕?3灤?)阋C{T謲嫊<笈G帵湽WV嘌?b褏??2?5煫X蒈i峔r澚唙U+\"筣紓y佴g揦慶簴?丫7T洙闔\'├陠眎v哱rZ鼏噇?;暩羘?譩k[渏椹&?
xoR?2$笽-?<槤奔曺癋3亴謂结絉株?g槯偬穡?艕yo‰廽朦\%\i?on镤濧?栢酣莭\_[浴x/,RI<駆司9v`?熄?\0氕)‥Y猹苫谨锈-婈贘i?煣}奤y
眿瓹g怚鐑撝簕?濫c縞`鱓6塷o╆(?觨s€XdG-幑\0c姚氁嬉?\_呷9\0I/?\\駛~O\_cNs媞N如鰊=O#\0!??\0g?疍s|??甄u??\0?鹱齻?鬜?U厒FQ?妑虡\\卜伾;FP\0?鹱齻?鬜諒?絼w0 H逼Py泿凸~?弻懭Cp鴷墯鱄鈶\%xZubr2欑庛垡瀦UM畁舾$欻\'旑磉|d a粚蟸氮?~?齥扨|蚗韰H颚賁方9Q茚T撿+E-\"N鳗駧斦浜擘<灼$:?}║!H,0z翮帣fウ\\Z]GxCn^#\nT9蕦幗?綷"跪髶盭ch麳х\\?E璿,j\0剎?汶盈|z盐's]*塍,?v?皩:?縍?:螙驸鈌杋I\0?躾?李;饈j绳ヽ???1霃诗KtmXf@c?侫S?詂?&4?iA?徧#+?岤帲鵥燊硋!\_.F?,樔U\0摓=?z琝%骕C!]蠃P\0\0镓騸圍MЩGh蹎椰?l?熕穤?搮?戞?\0????魘蹒U锜\0????魘蹒u躣}苦O鵟'?\0癠奪輺(鎵5?eq怗?呧O鵟'?\0癠奪?\0\n0牓\0(\0图?紹v氷蠯#c$籿靔缠CAA呌恦巅黭n奬0萛_
枞r禶:HC醈醢S邨o癍??Q??0}櫩茣|)"lK?限秇>Zm〕裰沷n沑"M&=珤q弞騔??﨡圐偅\0巡讖??煆?汛k.逴褮
+x磴i!敱TP牅Hp=\\\0啂駠?t?7\0?=凗;?鬨r?\0锬唿v忴h?型?

effective_person 2008-05-15
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "string.h"
main()
{
char p[]="good'jlf'fkjd'dfd'34'fd";
for(int i=0;i<strlen(p);i++)
{
if(p[i]==39)
p[i]='"';// 简单的例子。如果数据很大而且‘的分布都很离散的话也这能遍历了
}
printf("%s\n",p);
}

rogerwux 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 effective_person 的回复:]
C/C++ code
/*
因为
char *p="good'jlf'fkjd'dfd'34'fd";// p 指向的常量区,也就是字符串="good'jlf'fkjd'dfd'34'fd”是不可以改变的。
如果你真的想要定义修改的字符串 就定义:
char p[]="good'jlf'fkjd'dfd'34'fd";
这样修改吧!
*/
[/Quote]

那么我的把char *p转化为 char p[] 对吧?
此外 替换掉p[]中的单引号为两个单引号
麻烦提供一个有效的例子 因为数据比较大 十分感谢!
chlaws 2008-05-15
  • 打赏
  • 举报
回复

#include <string.h>
#include <stdio.h>

int main(void)
{
char input[50] = "abc'daasdf'asfsdafasdf'asd!";
char output[60] = "\0";
char *pt = output;
char *p;


p = strtok(input, "'");

while( p != NULL )
{
strcat(output,p);
pt = output;

while( *pt++ != '\0');
{
pt--;
*pt++ = '\'';
*pt++ = '\'';
*pt = '\0';
//puts(output);
}
p = strtok(NULL, "'");
}

pt = pt-2;
*pt = '\0';
puts(output);
return 0;
}

//result:
abc''daasdf''asfsdafasdf''asd!
Press any key to continue


iambic 2008-05-15
  • 打赏
  • 举报
回复
你确认你的内存够长吗?
effective_person 2008-05-15
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "string.h"
void Insert(char *p,int size,int pos)
{
for(int i=size;i>pos;i--)
{
p[i+1]=p[i];
}
p[i+1]=39;
}
main()
{
char p[255]="good'jlf'fkjd'dfd'34'fd"; //变成双引号 后还能保证该 字符数组还有空间!
int size=strlen(p)+1;
printf("%s\n",p);
for(int i=0;i<size;i++)
{
if(p[i]==39)
{
Insert(p,size,i);
size++;
i+=2;
}
}
printf("%s\n",p);
}

// 一个单引号改成 2个不就是再次插入单引号吗?

rogerwux 2008-05-15
  • 打赏
  • 举报
回复
To 6楼:
貌似这个也不是有效的。。。
看了一下 replace函数 en
zhangbin_115 2008-05-15
  • 打赏
  • 举报
回复
路过,学习
rogerwux 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 effective_person 的回复:]
C/C++ code
#include "stdio.h"
#include "string.h"
main()
{
char p[]="good'jlf'fkjd'dfd'34'fd";
for(int i=0;i<strlen(p);i++)
{
if(p[i]==39)
p[i]='"'; //不是双引号。。。
}
printf("%s\n",p);
}
[/Quote]

问题就是不能够使用 ''''
Um...
visame 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 effective_person 的回复:]
C/C++ code#include"stdio.h"#include"string.h"main()
{charp[]="good'jlf'fkjd'dfd'34'fd";for(inti=0;i<strlen(p);i++)
{if(p[i]==39)
p[i]='"';//简单的例子。如果数据很大而且‘的分布都很离散的话也这能遍历了}
printf("%s\n",p);
}
[/Quote]
人家是要换成两个单引号,你这是换成了一个双引号
我看用string最简单

string.replace
// replacing in a string
#include <iostream>
#include <string>
using namespace std;

int main ()
{
string base="this is a test string.";
string str2="n example";
string str3="sample phrase";
string str4="useful.";

// function versions used in the same order as described above:

// Using positions: 0123456789*123456789*12345
string str=base; // "this is a test string."
str.replace(9,5,str2); // "this is an example string."
str.replace(19,6,str3,7,6); // "this is an example phrase."
str.replace(8,10,"just all",6); // "this is just a phrase."
str.replace(8,6,"a short"); // "this is a short phrase."
str.replace(22,1,3,'!'); // "this is a short phrase!!!"

// Using iterators: 0123456789*123456789*
string::iterator it = str.begin(); // ^
str.replace(it,str.end()-3,str3); // "sample phrase!!!"
str.replace(it,it+6,"replace it",7); // "replace phrase!!!"
it+=8; // ^
str.replace(it,it+6,"is cool"); // "replace is cool!!!"
str.replace(it+4,str.end()-4,4,'o'); // "replace is cooool!!!"
it+=3; // ^
str.replace(it,str.end(),str4.begin(),str4.end());
// "replace is useful."
cout << str << endl;
return 0;
}

Output:

replace is useful.
effective_person 2008-05-14
  • 打赏
  • 举报
回复

/*
因为
char *p="good'jlf'fkjd'dfd'34'fd";// p 指向的常量区,也就是字符串="good'jlf'fkjd'dfd'34'fd”是不可以改变的。
如果你真的想要定义修改的字符串 就定义:
char p[]="good'jlf'fkjd'dfd'34'fd";
这样修改吧!
*/
rogerwux 2008-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 effective_person 的回复:]
C/C++ code
char *p="good'jlf'fkjd'dfd'34'fd";// 是这样的吗?这样的char *p吗?如果是的, 你放弃吧!
[/Quote]

是的。。。
为什么呢?
effective_person 2008-05-14
  • 打赏
  • 举报
回复

char *p="good'jlf'fkjd'dfd'34'fd";// 是这样的吗?这样的char *p吗?如果是的, 你放弃吧!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧