高分求教一个字符串函数!!!

lxw_6 2002-01-24 04:27:43
我有一个字符串如下:

"c:\mydir\file1.txt,d:\mydir\fi.txt,d:\dkg\ffff.exe,c:\dhgk\sdjgi.dll,"

它是一个以","分隔开的几个文件名的结合,并以","结尾。这个字符串的长度有可能根据文件的多少而变动的。

我现在想要写个函数,它定义一个字符串的数组,然后将以上的各文件名分别赋给数组中的各元素。并且反斜杠要变成两个。例如数组的第一个元素结果如下:
strarr[1]结果等于"c:\\mydir\\file1.txt"

请问这个函数该怎么写?最先给出正确函数代码的我将分全不给你。
...全文
212 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
absolute_good 2002-01-25
  • 打赏
  • 举报
回复
lxw_6(我是菜鸟我怕谁?) :
bool Initstr(char *Dest[],char *Sour)
{
if(Sour == NULL || Dest == NULL)return FALSE;
//错误判断
char *temp=Sour;
for(int i=0;i<MAX_VALUE;i++)//MAX_VALUE为最大文件名数
{
while(*temp != '\0' //应先判断*temp是否为'\0'
&&(*Dest[i]++ = *temp++) != ',')
{
if(*temp == '\\')
*Dest[i]++ = '\\';
}
*Dest[i] = '\0'; //加上字符串结束标志
if(*temp == '\0')break;
}
return TRUE;
}
sorry!我写的程序里有一些bug,我考虑了一下,修正如上。假如还有BUG,与我联系,qq:64902948
lxw_6 2002-01-24
  • 打赏
  • 举报
回复
我采用了absolute_good((NO.1)狗狗)的方法。


谢谢大家,给分!!
absolute_good 2002-01-24
  • 打赏
  • 举报
回复
这么简单的问题还要用函数?
dou_ya 2002-01-24
  • 打赏
  • 举报
回复
同意 zhang_wei_question(张炜) !!

使用strtok()。
solomon 2002-01-24
  • 打赏
  • 举报
回复
strtok 函数可以做到

InitStr(char* src, char* dest[])
{
int i = 0
char *sep = ",";
char *p = strtok(src, sep);
while( p!= NULL ) {
MyStrCpy(dest[i], p);
p = strtok( NULL, sep);
++ i;
}
}
void MyStrCpy(char *dest, char *src)
{
int i = 0;
char p[100];
char* s = src;
while(*s) {
if (*s != '\\')
p[i] = *s;
else
p[i] = *s; ++ i; p[i] = *s;
++ i;
}
p[i] = '\0';
dest = strdup(p);
}
yanchang 2002-01-24
  • 打赏
  • 举报
回复
学习一下啊!
zhakewei 2002-01-24
  • 打赏
  • 举报
回复
CStringArray *Convert(CString mystring)
{
CString temp = mystring;
cstring temp1;
cstringarray arraystring;
unsigned int t = temp.GetLength();
for ( unsigned int i = 0 ; i< t ;i++ )
{ if(temp[i] != '\')
temp1 +=temp[i];
else
{
temp1+='\';
temp1+='\';
arraystring.add(temp1);
}}
return arraystring;
}

思路就这样了,你自己改吧。
sdsuper 2002-01-24
  • 打赏
  • 举报
回复
CString CDialogImport::ChangeType(CString tt)
{
//AfxMessageBox("good");
TCHAR a;
TCHAR b;
for (int j=0;j<tt.GetLength();j++)
{
a=tt.GetAt(j);
if (a<(0x00))
{
j=j+1;
b=tt.GetAt(j);
if(b>0x00)
{
if(b=0x27)
{ // '=0x2
tt.SetAt(j-1,0x20) ;
}
}

}
}
// AfxMessageBox(tt);
return tt;
}
这个是我以前对数据导入时半个中文字符的处理函数,应该对你有帮助
zhang_wei_question 2002-01-24
  • 打赏
  • 举报
回复
不必给100了,C下有个函数完全胜任:strtok()

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

char string[]= "c:\mydir\file1.txt,d:\mydir\fi.txt,d:\dkg\ffff.exe,c:\dhgk\sdjgi.dll,";


char seps[] = ",";
char *token;

void main( void )
{
printf( "%s\n\nTokens:\n", string );
/* Establish string and get the first token: */
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
printf( " %s\n", token );
/* Get next token: */
token = strtok( NULL, seps );
}
}
测试上面已通过

注意到了,打印出来的没了'\',好办。

再用CString::Repleace()把每个子串中的'\\'替换为'\\\'

自己试吧,已经很简单了。



absolute_good 2002-01-24
  • 打赏
  • 举报
回复
看:
bool Initstr(char *Dest[],char *Sour)
{
char *temp=Sour;
for(int i=0;i<MAX_VALUE;i++)\\MAX_VALUE为文件名数
{
while((*Dest[i]++ = *temp++) != ','
&& *temp != '\0')
{
if(*temp == '\\')
*Dest[i]++ = '\\';
}
if(*temp == '\0')break;
}
return TRUE;
}
函数判断了字符串最后一个字符不为“,”的情况,假如那位高手有更有水平的代码,可以互相讨论
absolute_good 2002-01-24
  • 打赏
  • 举报
回复
看:
bool Initstr(char *Dest[],char *Sour)
{
char *temp=Sour;
for(int i=0;i<MAX_VALUE;i++)\\MAX_VALUE为文件名数
{
while((*Dest[i]++ = *temp++) != ','
&& *temp != '\0')
{
if(*temp == '\\')
*Dest[i]++ = '\\';
}
if(*temp == '\0')break;
}
return TRUE;
}
函数判断了字符串最后一个字符不为“,”的情况,假如那位高手有更有水平的代码,可以互相讨论
lxw_6 2002-01-24
  • 打赏
  • 举报
回复
在线等待,谁会啊???
lxw_6 2002-01-24
  • 打赏
  • 举报
回复
写错了。
应该是将分“全部”给你,而不是“全不”。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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